多测不清空,爆零两行泪。
多测不清空,爆零两行泪。
多测不清空,爆零两行泪。
后缀数组常数好大啊。
后缀数组常数好大啊。
后缀数组常数好大啊。
Chef vs Doof
略。
Doof on Cartesian
略。
Doof fires Brackets
为啥这题询问不也给一个 (O(n)) 的范围啊。
Jeremy gets a gift
bfs 都能写挂,真有我的。
Unique Substring
考虑用后缀数组求一下 (rk) 和 (ht) 数组,然后就是个二维数点。
好玩的事情发生了,我跑一组 (5*10^5) 的只要一点几秒,跑 (10^5) 组 (5) 的半分钟跑不出来,长教训了。
Perry learns Binary
(or) 操作是经典的线段树操作,对于查询给每个线段树节点套上一个 (trie) 就行。
多测不清空,爆零两行泪。
Phineas and Marks
博弈论好难啊,先鸽着,学会了再更新。
这个博主他没有鸽!!1
u1s1,慢慢分析找规律并不是很难...
这个问题是海盗分金问题加强版,分类标签是找规律和瞪眼法观察。下面阐述一下慢慢分析的过程。
题意简述:
有 (n) 个人,要分 (m) 个球,还会给出一个 (k), 要决定一个头领来分配球。
假设当前标号最大的人是头领,他会提出一个分配方案,每个人可以支持或者反对。
如果支持率达到了 (50\%),这个人就成为头领,方案也被采用。
如果支持率不到 (50\%),那么标号最大的 (k) 个人就会被干掉,如果不足 (k) 个人就会干掉所有人。
每个人想在保证自己不被干掉的情况下拿到尽量多的球,并在拿到尽量多的球的情况下干掉尽量多的人。
问最后的头领是谁,他自己最多能拿到几个球。
(n,m,kle10^9)。
解题思路:
分 类 讨 论。
(Large{Ⅰ.nle2*k:})
(large{①.nle k:})
显然答案是 ((n,m))。
(large{②.k<nle2*k:})
显然答案是 ((n,m))。
(Large{Ⅱ.2*k<nle2*(k+m):})
可以通过抵消干掉 (2*k) 个,所以剩下 (n-2*k) 个中要贿赂 (lceilfrac{n-2*k}{2} ceil) 个来保命,最后答案是 ((n,m-lceilfrac{n-2*k}{2} ceil))。
(Large{Ⅲ.2*(k+m)<n:})
这个需要讨论细一点观察出规律。
大概有这么一个规律。
(large{①nin[2m+2^ik+1,2m+(2^{i+1}-1)k]:})
这个时候第 (n) 个一定不是领队,需要找到一个 (X),使得 (n-X*k) 不在这个范围中,此时 (n-X*k) 要么在上面的情况中,要么就在下面的情况中,可以成为领队。
(large{②nin[2m+(2^{i+1}-1)k+1,2m+2^{i+1}k]:})
这个时候第 (n) 个一定是领队,因为标号在 ([2m+2^ik+1,2m+(2^{i+1}-1)k]) 中的人会无条件投给他,他只需要贿赂之前的人即可。
这样,我们就在 (O(log n)) 的时间内解决了这个问题。