题解:CF2103F Maximize Nor
首先考虑只有
注意到对于任意
- 形如
000\cdots0 的序列权值取决于0 的个数的奇偶性。 - 形如
???\cdots1 的序列权值始终是0 。
到这里实际上我们已经可以快速计算某一序列的权值了,方法如下:
- 如果序列不存在数字
1 ,归纳成结论 1。 - 否则找到序列中最后一个
1 对它使用结论 2,归纳成情况 1。
考虑计算每个区间的权值,枚举右端点,找到右端点前上一个
对于每个右端点直接找出权值为
然后考虑一般情况。先拆位,发现每一位的权值按照上面的讨论分成三段。固定右端点,左端点从左到右做一个扫描线状物。注意到每一位的三段权值只有最多四个关键点,那么把每一位的值加起来总共只有
具体细节可以看代码。
https://codeforces.com/contest/2103/submission/316770845