第一場
第一題篩素直接過。
第二題dp直接過。
第三題。
朋友的朋友是你的朋友 也就是說,這個事情控制在兩層。就沒事了。
in other word 合并集合的時候保留原集合。
第四題。不會。。。
第五題。太長看不動。。。
第六題。給定gcd和lcm,求可能數;
突然發現poj做過。。。心梗。枚舉。
lcm(a,b) = (ab)/gcd(a,b) ==> ab = lcm(a,b)*gcd(a,b);
然后枚舉。
不過區別在于因子個數。
感覺一枚舉就要T。
第七題。不想說了太水了。
第八題。和第二場的第一題是一致的。
第九題。和第六題挺像;N選K的所有乘積之和;
1) 選擇 data的第1個元素為arr的第一個元素,即:arr[0] = data[0];
2) 在data第一個元素之后的其它元素中,選取其余的 m - 1個數,這是一個上述問題的子問題,遞歸即可。
3) 依次選擇 data的第 2 到 n - m + 1元素作為起始點,再執行1、2步驟。
4) 遞歸算法過程中的 m = 0 時,輸出 arr 的所有元素。
排列組合過程。
第十題圖論。
鄰接矩陣建立有向圖。
floyd穩穩的超時。2000的三次方。
s級的數據應該控制在百萬。無解了
第二場
這場基本就是10th...
第一題暴力直接上循環 千萬別深搜 好好優化 別為難自己.
第十二題lcm一直T,后來仔細想了下1-60的用意;gcd函數是要打表的。
第二題 看不懂。。。如解題報告所示辣么簡單
第三題 忽略前導0.求子串數的期望。。。
就統計兩遍唄加起來除以2...麻煩的是怎么判斷被3整除啊!
reg = /^(0+|01((101)|(010))10)$/
意會一下:三種可能性:
第一種:0+表示全0
第二種:1((101)|(010))10*)
所以理智的做法是寫正則表達式然后枚舉子串match??
正規軍的套路
Answer
列舉所有狀態做狀態轉移 慶幸我是大電子的人。
第四題:二分查找合適的氣球高度。前提是最優解唯一。
第五題:簡單的不想說話。
第六題:太長看不動。。。
第七題:map和pair什么的都可以的。
第八題:這個博弈。。。還tm是個線段樹啊
第九題:這題變態,寶寶不會。
第十題:RMQ
第十一題:類似第十二題。如果當時把12的心思花在11上
也會T。。。10^9了親。
第三場
強A兩題。
網選
A三元組distinct枚舉求平方和;
(set就可以吧?而且只要不重載,set應當是自動排序的)
先考慮特殊情況:長度不到3;
對所有數據排序;判重;找符合條件的;計算;
B有點心疼 大數階乘。數據是1e+5那么大;(當然要取余)
應該不會再出大數的題了吧 如果出,全tm高精度做法
然后至于這種取模的,打表。
freopen("np.out","w",stdout);記得這個就可以
C是線段樹無疑
D區間維護
E應該是要直接寫模擬的
F快速冪不說了
G多叉樹dp
H最短路
I高中物理
j不會。。。
沒把B和H做出來真是心塞