ARC127 比賽記錄


打爛了。
被 A 卡了。
胡了 B 然后直接 skip 了。
被 C 卡了較長時間。
回頭過 B。
卡了 D。

A

\(1\cdots n\) 所有前綴數前綴 \(1\) 個數和。
求出至少有一個長度為 \(k\) 的前綴 \(1\) 的個數之和。
枚舉 \(k\) 然后枚舉這個前綴出現位置即可。
復雜度 \(O(\text{poly}(15))\)

B

直接構造。
發現第一位肯定有 \(n\)\(0\)\(n\)\(1\)\(n\)\(2\)
然后第一位的 \(0\)\(1\) 不管只需要第一位的 \(2\) 后面跟着的最小即可。
直接暴搜搜出前 \(3^{K-1}\) 個最小的,然后直接填即可。

C

直接做做完了。
考慮先整體減一,第一位肯定是 \(1\) 然后諸位確定。
如果當前數是 \(0\),那結束了。
否則如果屬於 \([1,2^{m-1})\) 肯定是 \(0\),否則是 \(1\)
如果屬於 \([1,2^{m-1})\) 那最高位就是 \(0\) 否則是 \(1\) 所以可以 \(O(1)\) 判斷。
然后如果最高為是 \(0\) 就減 \(1\) 否則刪去最高位。
根據結論對於一個二進制模擬進位復雜度均攤是 \(O(1)\) 的。
然后判斷是否全 \(0\) 直接動態維護當前全局 \(1\) 個數即可。

D

卡 @AhoCorasick 的
我們需要判斷 \(a_i\oplus a_j\)\(b_i\oplus b_j\) 的關系。
考慮比較兩個二進制數,是找到他們最高不相同位置然后比較,本質上就是 \(\oplus\)
那我們對於每個 \(i\) 我們把 \(a_i\oplus b_i\) 作為代表,那兩個數不同只需要比較代表元最高的不同位即可。
我們考慮在最高不同位處統計貢獻。
考慮把所有當前這位是 \(0\) 的答案塞到桶里去,然后在對每個 \(1\) 在桶里查詢。
有貢獻當且僅當:它之前相同(信息量 \(O(n)\)),當前這位不同。
然后貢獻計算需要每位拆開,同時還需要記錄貢獻的是 \(a\) 還是 \(b\)
這里直接分類討論一下即可。
總復雜度是 \(O(n\log ^2n)\)

E

草,思維題!!!
考慮把最終集合排序,然后找到字典序最大的。
顯然就是每次 \(1\) 操作插入 \(1\) 時最大。
如果字典序大於這個最大字典序肯定無解(聽君一席話)
如果小於,必定有解。
考慮構造,設那些在答案中出現的為目標狀態,然后從小到大排序。
從小到大逐個插入,如果碰到 \(2\) 就拿個不是答案來“墊背”。
可以證明對於每個數“墊背”的數一定存在,所以它肯定可以被構造。
然后搞個 \(O(n^2)\) dp


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM