CF2036(Codeforces Round 984 (Div. 3))

疯狂写,结果卡在t3的分类讨论当场暴毙,切完t4困得受不了睡觉去了。

A. Quintomania

难度:红

B. Startup

难度:橙
排序一下就行了。

C. Anya and 1100

难度:橙-黄
分类讨论。

D. I Love 1543

难度:橙-黄
计数时注意破环成链。

E. Reverse the Rivers

难度:黄
注意到创建河道之后地区的值具有单调性,所以可以二分。本质上是一个线段交问题。

F. XORificator 3000

难度:黄-绿
我们应注意到这样一条性质:

\[0\oplus1\oplus...\oplus n \left\{ \begin{array}{lcl} x& &n\equiv0\ (mod\ 4)\\ 1& &n\equiv1\ (mod\ 4)\\ x+1& &n\equiv2\ (mod\ 4)\\ 0& &n\equiv3\ (mod\ 4) \end{array} \right. \]

所以我们可以 \(O(1)\) 求出 \(l\oplus l+1\oplus...\oplus r\)
然后,我们要把那些不有趣的数去掉。这里我们对低于 \(i\) 位和高于 \(i\) 位进行分类讨论。

G. Library of Magic

难度:绿-蓝
我们从 \(n\) 的最大位开始找三个数中的最大位,注意这里的位是在二进制下。
假设查询的为第 \(i\) 位。我们查询 xor 2^i min(2^(i+1)-1,n)。若查询结果不为 \(0\),则说明这一位上有数字。
为什么呢?假设有一个或三个数有这一位,则查询的结果必不为 \(0\)
若是两个数,因为这两个数不可能相同,所以也不可能是 \(1\)
若第 \(i\) 位上有数字,则 \(ans\) 要加上 \(2^i\),之后查询的时候要把查询的两个数异或上 \(ans\)。这样就能确定每一位上是否有数了。
另外,我们要求的有 \(3\) 个数 \(a,b,c\)。在求 \(b\) 时,若 \(a\) 在询问的 \(l\sim r\) 范围内,就要把结果异或上 \(a\)
\(c\) 时也是如此。

posted @   nagato__yuki  阅读(38)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
点击右上角即可分享
微信分享提示