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$步

原文地址:https://www.cnblogs.com/gllonkxc/p/15598796.html