Codeforces Global Round 17
solved: 1/9
C:
考虑二分答案, 假设我们知道序列的长度len, 那么对于在队列里的元素, 他的位置可以在[len - ai, bi + 1]之间。
因为每个人有i元, 那么后插入的肯定是比先插入大的, 如果新插入的数的位置now在[len - ai, bi+1]之间, 那么now++, now从1开始。
如果now比len长, 那么就是len就是可以构造出来的。
补题: 4/8
A:
询问左下角和右下角肯定能知道这个点在哪里(1, 1) (n, 1)
假设点是(x, y) 那么第一次询问的dis1 = (x-1)+(y-1)
第二次询问的dis2 = (n-x)+(y-1)
那么dis1-dis2 = n - x - x + 1 = n+1-2x, 可以把x算出来
代入dis1/dis2就可以算出y
所以最多2次, 然后如果x肯定是1, 即min(n, m)=1的时候, x是确定的
假设n=m=1, 那么我们不用询问就能知道x,y在哪里
所以这题做完了
我也不知道自己为什么会去求log
B:
在s[l]==s[r]的时候, 这两个端点是可以保留的
先把原串跑到两个端点不相等, 即s[l]!=s[r]
然后要么删掉s[r]要么删掉s[l], 答案只能是这两个
因为如果不删这两个中的一个的话, 肯定不满足s[l]==s[r](回文)
那么再O(N)扫两遍就成了
D:
考虑怎样是有解的
首先, 有奇数的肯定是合法的, 因为总能使得序列沿着0对称
所以只需要考虑偶数的东西
假设第i个数的起点为xi, 那么他对和式的贡献是$\frac{b(2x+b-1)}{2}\ =\ xb+\frac{b(b-1)}{2}$
怎么判断一个大小为n的序列是否合法, 当且仅当$0=\sum_{i=1}^n \frac{b_i(b_i-1)}{2} + x_ib_i$
等价于$\sum_{i=1}^n \frac {b_i(b_i-1)}{2} = \sum_{i=1}^n x_ib_i$
左边这部分是确定的, 设为$s$, 那么这个方程组有解当且仅当s是$gcd(\{b_1..b_n\})$的倍数(裴蜀定理)
所以我们已经知道怎么判断了...合法/不合法了
我们只考虑有偶数的序列${A}$, 先把所有的数/2, 在当前序列中的奇数倍中挑选奇数个, 其他的偶数中不管怎么挑, 此时$\sum_{i=1}^n \frac {b_i(b_i-1)}{2}$肯定是一个奇数, 肯定不是2的倍数
循环往复到结束即可
当没有奇数可以选时, 肯定是合法的, 因为此时的sum肯定是2的倍数
E:
题目要求任意一个子序列都得满足小于average的数量严格大于average的数量
在原序列中插入一个数x, 当且仅当{c1, ci, x}是满足条件的
而{c1, ci, x}是满足条件的当且仅当{c1, cn, x}是满足条件的
而{c1, cn, x}是满足条件的当且仅当$cn\leq \frac{x+c1}{2}$
这个数x可以通过二分查找来找到
可以发现如果有一片的x, x, x, x…, 那么我们只需要把前面的一坨都选了, 后面的不用判断(因为包含在原序列里)
而对于ai不相等的序列中, 每次至少让x比an多an-a1, 也就是说每个数平均跳$log_2A_i$步