一天之後,計蒜客第二場,感覺一般般,第一題卡了一下處理的比較慢,導致後面時間略微不足,第二題倒是沒什麼坑點
思路:這題dp的味道還是挺明顯的,dp選擇當前元素所能達到的最大長度,至於轉移,第一次想的是轉移之前所有狀態中可能的狀態,然而o(n^2)的複雜度,加上多組資料,毫無疑問tle
之後想到用d,轉移可能的狀態,而不是轉移先前的狀態,用map儲存狀態,然而,map只是過載了下標運算子,內部紅黑樹實現o(log(n))的複雜度,結果還是被卡掉了
於是想到各種優化,優化cin,優化運算,優化函式等各種,然而依然杯水車薪
於是想到set預處理已經出現過的狀態,實現離散化,二分查詢離散化後的狀態來優化原來的暴力列舉,結果依然tle
最後猛然發現狀態的資料範圍僅有5次方,於是果斷回到第二種做法,還原map為陣列,順利ac,好吧,醉了
#include #include #include #include #include #include #include #include #include #include #include using namespace std;
const int n = 200;
const int maxn = 2e5+10;
/*int p[maxn];
setp;
int dp[maxn];
map dp;
int myabs(int k)
return k;
}int main()
//}}
p.insert(pp);
if(dp[pp] > maxl)
}//cout << maxl << endl;
printf("%d\n",maxl);
}}*///mapdp;
int dp[maxn];
int main()
}//cout << maxl << endl;
printf("%d\n",maxl);
}}//o(n^2)
//o(2*n*d*log(n))
//優化
//o(n*(log(n)+d)*log(n))
//o(2*n*d)
思路:這題就是個字串大模擬,map訪問鍵值,字尾都採用substr截斷判斷,畢竟處於簡單位置,比較友好
#include #include #include #include #include #include #include #include #include #include using namespace std;
const int maxn = 1e5+10;
mapcol;
int main()
else if(temp=="delete")
else
}else if(temp=="query")
ch = ch.substr(nlen-len,len);
if(ch == cha)
}cout << re << "\n";}}
}return 0;
}
2018計蒜客初賽1
又到了一年一度的計蒜之道,第二次參加計蒜之道,但願今年能在去年的基礎上有個新突破 第一場,由於時間限制,只寫了乙個簽到題,就此拉開了本年度計蒜之道 思路 這題這題其實思路倒是蠻清晰的,就是不斷維護陣列最大值,關鍵就是邊界處理問題,考慮清楚還挺有簽到意味 include include include...
2017計蒜客初賽5
ucloud 剛剛建立乙個新機房,近日正在進行網路搭建。機房內有 n n 臺伺服器和 m m 個分線器,整個機房只有乙個網線出口。分線器的作用是將一根網線轉換成多根網線。蒜頭君也知道每個分線器輸出的最大網線根數 不一定要將分線器輸出的每根線都用上 問你至少需要使用多少個分線器才能使得每台伺服器都有網...
計蒜客初賽4練習題
因賬號衝突而遺憾錯過了這場。拿來練練手,稍微了解一下題目難度吧。比賽共兩題,其中第二題有三小問,按情況,一般做出第一題和第二題的第一小問,並加快手速就能晉級了,那就看看這兩部分吧 思路 矩形晶元的放置,一下就想到了之前做過的一道遞推,只需要將遞推從一維推廣到二維即可,用dp即可實現 對於被焊接了的位...