NOIP 模拟 12
T1 暴力操作(opt)
类似背包的处理出来除以每个数的最小代价,然后直接二分 check 即可,细节就是处理前后要做后缀 min
,然后求出 \(\lfloor\frac{a}{x}\rfloor\le mid\) 的最小 \(x\),可以通过整除分块的套路,\(x=\lfloor\frac{a}{mid+1}\rfloor+1\)。
T2 异或连通(xor)
trie
树上的一个子树对应着有序序列的一个区间,离线下来,对于询问建 trie
树后就是线段树分治板子了。
T3 诡异键盘(keyboard)
比较朴素的一个想法就是先预处理出 \(d_i\) 表示删去 \(i\) 个字符需要的最小代价,不需要同余最短路,直接暴力 dij
即可。然后设 \(f_i\) 表示匹配到 \(i\) 的最小代价,可以直接枚举字符串来转移,发现这个东西是枚举字符串,限制很大,考虑直接枚举下一个位置转移,直接找前缀即可,可以用 trie
树和哈希来实现,然后对于每个前缀都处理一下删去后面字符的最小代价就做完了。
T4 民主投票(election)
我去,有点人类智慧,发现无从下手,只能想到先求一下全局每个点都尽量少放的个数 \(s\),设 \(f_i\) 表示 \(i\) 节点要投给子树外的票数,然后轻松求出,发现求出来这个东西也不知道能干嘛,设 \(size_i\) 表示 \(i\) 的孩子数,然后人类智慧的想到对于 \(size_i>s\) 的,一定可以,对于 \(size_i<s\) 的一定不可以,大于的比较简单,小于的就是这个子树能自己消化,对上面没有影响,然后问题就神奇地转化为了只处理 \(size_i=s\) 的节点了,它要赢一定是其他点最多放 \(s-1\) 个,然后对于 \(s-1\) 再处理出来每个节点投给子树外的票数,如果可以的话,一定是这个节点影响了答案,所以 \(f_i\) 和 \(f_1\) 必须为 \(1\),并且从它到根的路径上没有 \(0\),否则不可以。直接 dfs
搜一遍就行。
总结
这场打傻逼了,挂死了,T1 做过的原题,然后细节处理不到位,写挂了,挂 80pts,被去年的自己单调队列了,然后猛冲 T2 不会,居然忘了记忆化答案,又忘了这个,没拿到 30pts,T3 唐氏写了 KMP,正确性不对,挂 20pts,T4 暴力有个地方忘了加一加上链写挂,挂 25pts,所以这场估了 235pts,还能轻松打到 265pts,最后只有 110pts,纯纯的傻逼,lzr \(n^2\) 过 1e6
,打的比去年牛子高,怎么比?😅️😅️