ZJOI2020 Day1 Day2

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)

[egin{cases}a_1 imes x + p_1 equiv c_1 (mod p) \ a_2 imes x + p_2 equiv c_2 (mod p) \ ... \ a_n imes x + p_n equiv c_n (mod p) end{cases} ]

给出一个扰动 (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}) ,请手写。