Mazare / Philip Strand —— Battlecry

[Ynoi2012] NOIP2015 充满了希望

为什么有人把单点求值看成了区间求和想了一晚上不会做呢。

46 [IOI 2022] 囚徒挑战

想了一会儿意识到:500500 个囚犯是假的。

按照进制拆位,一开始二进制,分成每位用两个代表数当前位是 0/10/1 以及看的是 A 还是 B,然后发现后者没用,轮流看就行,三进制的话这个东西能做到 2424。

这里有个插曲:我在睡梦中想到一个囚犯有较大的概率去抄上一个囚犯写的数字,觉得很有用,而且这样 500500 个囚犯就有用了!虽然第二天醒来发现没有用,但是很有意思!接下来的内容是第二天想的。

最后一次查询是没有用的,因为两个数不相等,一旦查出最小最大就直接结束。

根据此可以转化到,有一棵线段树,每个节点可以使用 bb 的代价将其分为 b+2b+2 部分,第一个部分和最后一个部分大小都是 11。因此:

1
2
3
4
5
6
7
for (int i = 3; i <= n; ++i) {
f[i] = 1e9;
for (int j = 1; j <= i - 2; ++j) {
f[i] = min(f[i], f[(i - 2 + j - 1) / j] + j);
}
cout << i << ' ' << f[i] << '\n';
}

这里甚至有 f5588=20f_{5588}=20,于是做完了。将转移打印出来,然后根据此建表即可。

但仔细一想发现多少有点难写。


Nothing built can last forever.
本站由 iznomia 使用 Stellar 1.30.4 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。