多校聯合集訓(彙總)
結果 |
題目編號 |
標題 |
題解 |
正確 |
提交 |
Y |
1001 |
字串“水”題 |
|||
Y |
1002 |
水題 |
|||
Y |
1003 |
||||
Y |
1004 |
水題 |
|||
N |
1005 |
||||
Y |
1007 |
||||
Y |
1008 |
||||
Y |
1009 |
失戀的小 T |
|||
N |
1010 |
A 字串“水” 題
首先預處理出一個 prefix 陣列,prefix[i]最低二進位制最位為 0 表示 a 字元在[1..i]中出現了偶數次,反之奇數次,其他二進位制位為含義以此類推。這樣以 i 開頭的偶串個數就是prefix[i...n]中和 prefix[i - 1]相等的數個數,這樣倒著掃一遍 prefix 陣列,把掃過的 prefix加入到一個 map 裡就好了,時間複雜度 O(nlogn)。
B 小婷婷吃蘑菇
水題,貪心就行了。
C 瑞神要考研
直接根據題意進行連結串列模擬即可。
D 有解嗎?
水題。
E 瑣碎的區間
本題的重點在於開根號操作的處理。觀察過後不難發現一個現象,對於一個區間開根號,所有的數都會不斷地相互趨近。而趨近到一定程度之後,這個區間所有的數開根號
取整就會相同,這樣就可以直接打一個 lazy 賦值標記。 要實現上述過程,就要維護一個區間最小值和一個區間最大值,當最大最小值開跟取整相同時就可以之接打 lazy 標記賦值,否則就分作兩個子樹處暴力理。 而暴力處理的次數不會太多的,1e5 以內的數開跟 5 次就可以相等。這樣就比較高效的解決了這個問題。
G 數字邏輯練習題
這個題就是直接根據定義模擬即可。
H Envy
本題的一個做法可以將所有數字離散化,然後用線段樹維護一下即可,也可以用單調棧
做。
I 失戀的小 T
這道題的原形是 URAL 1590
http://acm.timus.ru/problem.aspx?space=1&num=1590
題意簡化後是:給你一個字串,問這個字串有多少個不同的字串,這道題第一眼看暴力可做,雜湊可做,字典樹可做,所以很容易馬上試一發,但是仔細算算複雜度和記憶體是過不了的。 首先想到的是字典樹,把所有的字串插入到字典樹中,最後輸出一共有多少樹的節點即可,但是這樣會超記憶體。然後想到了字典樹的左兒子右兄弟表示法,可以節省記憶體,然而這樣每次查詢兒子的時候需要遍歷一遍兒子連結串列,導致 TLE。 然後想到了雜湊,這樣就不會超時了,求出雜湊表來之後,只有 n2 的複雜度,然而這樣塞進一個 set 裡面也會超時。於是想到了先放進
vector 再排序去重,可以減少一定時間,然而這樣 vector 就存不下了,MLE。 直到最後才想到了字尾陣列,知道了字尾串字典序排序,求出 height 陣列來之後,就可以知道每個字尾與前一個字尾的最長公共字首。這樣最後統計求和一下就可以了。需要注意劉汝佳的模板使用的時候字串後面需要補’ $’ 字尾陣列也算是字串處理中的神器了,經常和 RMQ 結合使用,建議大家學會。
排序去重之後,對 1 到 max{ai}中的每個數字 j 求出小於 j 的最大 ai,記為 bj。 對於每個 ai 列舉它的倍數即可,時間複雜度 O(max{ai} + nlogn) 。