Day1
T1
给定一个由字符 ( ext{'a', 'b'}) 构成的字符串 (str) 。
一个串为好串的定义是:串长为偶数,且左右两半相等。比如说 (abcdeabcde) 就是好串。
有 (q) 次询问,询问区间 ([l,r]) 内有多少个本质不同的好串(也就是一模一样的好串只算 (1) 次)。
(1le n,qle 2 imes 10^5)
T2
给定一颗广义线段树,读入按中序遍历的方式告诉你每根线段 ([l,r]) 的 (mid) 值。
你需要执行 (k) 次 选区间 操作,每次等概率选择一个区间 ([ql, qr]) 满足 (1le qlle qrle n) ,并且相应在线段树上打懒标记。
对于每个区间 ([ql, qr]),执行 ( ext{modify(1, 1, n, ql, qr)}) :
void pushdown(int u) {
if (tag[u]) {
tag[lson[u]] = 1;
tag[rson[u]] = 1;
tag[u] = 0;
}
}
void modify(int u, int l, int r, int ql, int qr) {
if ([l, r] ∩ [ql, qr] = 空集) return ;
if (ql <= l && r <= qr) {
tag[u] = 1;
return ;
}
int mid = 读入的 mid 值;
pushdown(u);
if (ql <= mid) modify(lson[u], l, mid, ql, qr);
if (qr > mid) modify(rson[u], mid + 1, r, ql, qr);
}
请求出期望下线段树中 (tag) 值为 (1) 的线段的个数。
(n) 在 (10^5) 级别, (1le kle 10^9) 。
T3
给定一个长度为 (n) 的序列 (a_1,a_2,...,a_n),你可以执行以下三种操作:
- 选择一个区间 ([l,r]) ,让区间内的数全减 (1)
- 选择一个区间 ([l,r]) ,让区间内下标是奇数的数全减 (1)
- 选择一个区间 ([l,r]) ,让区间内下标是偶数的数全减 (1)
你需要最小化你的操作次数,使得所有数变成 (0) 。
Day2
T1
(Alice) 和 (Bob) 在 树/基环树 上的游戏。。。
题面有点长,咕咕
T2
给定 (n) 个数 (a_1,a_2,...,a_n) ,每次等概率选择一个数(选过的数下次可能还会被选)。
问期望下取多少次数,才能出现 (k) 个连续的数(也就是满足 (a_{i_1},a_{i_2},a_{i_3},...) 依次 (+1))?
(1le nle 2 imes 10^5, 1le a_ile 10^9)(好像)
T3
给定 (n) 个方程组,参数 (a_i,c_i)。
给出一个扰动 (err) ,每个 (p_i) 均为 ([lceil - frac{err}{2}
ceil, lceil frac{err}{2}
ceil]) 内随机的一个数。
你需要找到一个 (x) ,使得它满足上述所有条件。
数据保证有且仅有一个 (x) 满足条件。
(n=2000, 1le a_i,c_i,ple 10^{18})
如果要用 ( ext{__int128}) ,请手写。