Loading

:D 获取中...

Summary - ber 中周赛 Round 24

倒数第一我最强,worth reflecting,故记之。

T1

一开始读错题了,浪费了不知道多久。

然后后面实在不会了打了一个很丑的 \(O(n \log n)\)

中途提示说学了双指针,但是认为那是 T3 用的,,,总之就没想到。

但是为什么呀?固定好了右端点逐渐变大,左端点也变大,那么中间的最优决策点也逐渐变大。对左端点和最优决策点维护两个指针 \(l, j\) 就好了,因为单调所以是 \(O(n)\) 的。

for (; i <= n; i++) {
		if (s[i] == '0') {
			l++;
			while (s[l] == '1') l++;
			while (j < l || (nxt[j] && nxt[j] <= i && max(i - nxt[j], nxt[j] - l) < max(i - j, j - l))) j = nxt[j];
			ans = min(ans, max(i - j, j - l));
//			cout << l << " " << i << " " << j << endl;
		}
	}

T2

这个呢,我一开始又把题读错了,然后又浪费了很久。

最后当然是得到了题解上的结论,但是不知道为什么属于是脑抽了,写了一个要把 \(a_i\)\(b_i\) 分解质因数然后比一堆 \(\min\)\(\max\) 的玩意(本质是一样的),而且因为细节原因挂掉了,得了 \(0\) 分。

T3

积累这个 trick:第 \(k\) 小 / 大转化成二分判断 \(\leq mid\)\(\geq mid\) 的个数与 \(k\) 的大小关系。当然早就应该知道,退化了只会看到中位数二分了,,,

二分完 check 的话也是有单调性的,维护一下就好了。注意精度问题,可以直接循环二分 \(100\) 次。

T4

唯一一道 A 了的题。也浪费了挺多时间,原因是维护 Hash 应该是:

hash -= p[n - 1] * (b[i - 1] - 'a' + 1);
hash = hash * P + b[i + n - 1] - 'a' + 1;

写成了:

hash -= p[n] * (b[i - 1] - 'a' + 1);
hash = hash * P + b[i + n - 1] - 'a' + 1;

😓

T5

原题。但是很显然没有时间打了,最后在冲 T6 得了 \(0\) 分。

T6

非常一眼!前面耗费过多时间,然后最后十多分钟打了个这玩意,只能过小样例(大样例没测),爆零了。

嗯,思路是一样的,但是由于我的 bitset 不会那个左移操作退化到了 \(O(n \log n m)\)

void change(bitset<M> &vis, int x) {
	vis = ((vis << x) & full) | (vis >> m - x);
}

其中 full = (1 << m) - 1

以及维护线段树的时候,,,忘了对 \(m\) 取模,,,而且写出了这种奇葩东西:

(t[p].tag += v) %= m;
change(t[p].vis, t[p].tag); // 应该是 t[p].v

值得表扬的是根据上次总结的经验写了逆 dfn 序。

In a nutshell

总之挂的分应该不比考试分少。因为实现问题挂了很多分,因为美丽的指针挂了很多分。

说些无意义的话也没啥意义,所以这也就没意义了。


T1 做了一个小时,破防了。

T2 现在正在做,破防了。

现在发现又读错题了,我是厉害的。

又把样例看错了。

现在快十点了,最低得分 \(0\) 分。

破防了,变量名写错调了不知道多久。\(lst_x\) 写成 \(x\) 了。

T4 Hash 莫名挂了???哦 \(n - 1\) 写成 \(n\) 了。

T2 \(T\) 为什么这么大???

又调了不知道多久,结果初始化有问题。蚌埠。

posted @ 2024-01-26 19:55  liuzimingc  阅读(7)  评论(0编辑  收藏  举报