2023.10.7 LGJ Round

发布时间 2023-10-08 19:26:37作者: GloriousCc

A

你每秒种可以施展一种秘籍 \(\{a_i,b_i\}\),使得后面 \(a_i\) 秒每秒都造成 \(b_i\) 伤害。问至少多少秒可以造成 \(M\) 的伤害。
\(n(n\le 3e5)\) 种秘籍,\(M\le 1e18,a,b\le 1e9\).

显然可以二分答案,考虑二分 \(mid\),那么我们要造成最多的伤害。
贪心,每秒都选择在 \(mid\) 秒内造成伤害最多的。
如果当前剩余 \(p\) 秒,对于 \(a_i\le p\) 的贡献是 \(a_ib_i\),其他的贡献是 \(p\times b_i\).
只需要维护这个最大值,可以对于 \(a_i\) 排序,对于每个时间段处理即可。

B

有两个树 \(n\le 1e6\),两棵树分别有一枚棋子在 \(s,t\) 处。
你要把 \(s,t\) 都移动到 \(1\) 节点,每次可以移动任一枚棋子至相邻点。
求在所有时刻中,\(s,t\) 所在点编号的和的最大值最小是多少。

显然是二分答案,考虑二分 \(mid\)
考虑贪心,那么问题变成了:
不断询问 \(s\) 在不经过大于 \(mid-t\) 的点能到达的最小点,并使 \(s\) 到这个点。\(t\) 同理。
由于 \(s,t\) 不断变小,所以 \(mid-t\) 是递增。
使用并查集,从小到大把点加入,维护每个连通块内最小点。
由于询问递增,所以并查集只需要把 \(1\sim n\) 扫一遍就行了。

C

给定长为 \(n(n\le 5e4)\) 的序列 \(a\),你可以更改一个数改成一个 \(\le 5e5\) 的正整数,求最多多少子串 \(\gcd>1\).
考虑上值域的限制,就会稍微难处理一点,需要用合理的方法枚举这个位置选哪几个质数。
除了前后缀不变的贡献,经过这个点 \(i\) 的子串有三种:\(l<i,r=i\)\(l=i,r>i\)\(l<i<r\) 。(忽略 \(l=r=i\)
对于前两种,只要有一个质数即可确定贡献;而第三种只和 \(\gcd(a_{i-1},a_{i+1})\) 有关。
所以可以枚举 \(\gcd\) 内选了哪几个,有 \(2^6\) 种情况;然后分别再枚举两个质数,统计贡献。

D

ZZH 有很多的数,经过统计,ZZH 一共有 \(v_0\)\(0\)\(v_1\)\(1\)...\(v_{2^n-1}\)\(2^n-1\)。因为一些原因,ZZH 只有这 \(2^n\) 种数。
ZZH 和 GVZ 要对这些数进行 \(m\) 次操作。每一次操作由一个人进行。每一次,有 \(p\) 的概率由 ZZH 操作,\(1-p\) 的概率由 GVZ 操作。
两人进行操作的时候都会依次操作每一个数。对于一个数 \(s\)
如果 ZZH 对这个数进行操作,她会在 \(0,1,,,2^n-1\) 中找出所有的 \(t\),满足\(t\text{ or }s=s\),然后将s等概率随机变成找出的 \(t\) 中的一个。
如果GVZ对这个数进行操作,她会在 \(0,1,,,2^n-1\) 中找出所有的 \(t\),满足 \(t \text{ and } s=s\),然后将s等概率随机变成找出的 \(t\) 中的一个。
因为操作需要非常长的时间,她们想要知道所有操作结束后,对于每一个 \(i\)\(i\) 的个数的期望。