Codeforces Round #691 (Div. 2) 题解
- A
不多说了吧,直接扫一遍求出 ri>bi 的个数和 ri<bi 的个数
- B
稍微打个表找个规律就可以发现,当 n 为奇数的时候,答案为 (n+1)(n+3)2,当 n 为偶数的时候,答案为 (n2+1)2。
- C
考虑 gcd 的另一种计算方式,gcd(a1,a2,…,an)=gcd(a1,a2−a1,a3−a2,…,an−an−1),那么就有 gcd(a1+x,a2+x,…,an+x)=gcd(a1+x,a2−a1,a3−a2,…,an−an−1),预处理出 G=gcd(a2−a1,a3−a2,…,an−an−1),然后对于每组询问,输出 gcd(G,a1+bj) 即可。
- D
首先要明确的一点是,我们不会出现回倒的情况,就是从杯子 x 倒到一个杯子 y,再倒到一个杯子 z,因为这样还不如 x 直接倒到 z,y 直接倒到 z。
于是本题变为选择 k 个杯子 i1,i2,…,ik,将所有其它杯子里的水倒到这 k 个杯子里,这样总共能容纳 min 的水。
然后就可以 dp 了,dp_{i,j,k} 表示在前 i 个杯子里选择了 j 个杯子,这 j 个杯子的 a_i 的和为 k,最多能容纳多少水。时空复杂度均 n^4。
- E
现场被这题区分了/kk
首先要明确的一点是 LRUD 和 IC 肯定不是同一类的。如果 s 中只包含 LRUD,那此题就变得异常简单。直接维护两个标记 x,y 表示行/列分别位移了多少就可以了。
重头戏在于 I 和 C。首先我们要理解 I 和 C 的本质。
对于排列 p_1,p_2,\dots,p_n,我们如果把每个元素看作一个二维坐标 (i,p_i),那么这个排列的逆元相当于 (p_i,i),即交换两维坐标的值。
I 和 C 也是如此。如果我们把这个矩阵看作 n^2 个三维空间里的点 (i,j,a_{i,j}),那么 I 操作其实就是交换 x,z 坐标的值,C 操作其实是交换 y,z 的值。
这样一来这题就很好做了,对于 LRUD,记录每一维的增量,对于 IC,记录当前每一维是原来的第几维,这样每个操作都可以 \mathcal O(1) 解决了。
看到没?什么超纲的算法都没有。所以啊,菜是原罪/kk
- F
现场试图看这道题结果什么思路都没有。
考虑记 0 为 -1,1 为 +1,这样可以得到一个长度为 |s| 的由 +1 和 -1 组成的序列。
然后对这个序列做一遍前缀和,并连一条 s_i\to s_{i+1} 的有向边,这样可以得到一张图,一个欧拉回路就对应着一个字符串。
考虑题目中那个奇怪的操作的本质。假设我们对区间 [l,r] 进行操作。既然 [l,r] 要求 01 个数相等,那么肯定有 s_{l-1}=s_r,而翻转+反转实际上等于将这些边反向。所以实际上该操作等价于选择一个环然后将环上所有边反向。
这里需要观察出一个性质:就是操作前后,原图所包含的边集 E 是不变的。因为每次操作是将边反向,所以如果把有向边改为无向边,那么边集显然是不变的。又由于我们操作的是一个环,所以对于一条边 (x,y),x\to y 和 y\to x 的次数是一样的,所以 x\to y 和 y\to x 在操作前后出现次数都是相同的。
有了这个性质,我们还需观察出另一个性质:原图任意一条欧拉回路(起点和终点必须与初始相同)代表的都可以由原字符串进行一系列操作得到:首先我们假设原路径与当前路径在 x 位置出现了分歧,一个走了 x\to x+1 的边,一个走了 x\to x-1 的边。而这两个路径终究还是要走 x\to x-1 和 x\to x+1 的边的,所以肯定有一条边 x+1\to x,也有一条边 x-1\to x,此时我们选择 x\to x-1\to x\to x+1\to x,并将其翻转,看看会发生什么。此时我们惊奇地发现,原来先走 x\to x-1 的路径改走 x\to x+1 了!以此类推,最后两个路径一定会重合。
于是此题就变为:求字典序最小的欧拉序。直接贪心就可以了。
看到没?什么超纲的算法都没有。所以啊,菜是原罪/kk
看到没?什么超纲的算法都没有。所以啊,菜是原罪/kk
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· C# 13 中的新增功能实操
· 万字长文详解Text-to-SQL
· Ollama本地部署大模型总结
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(4)
· 卧槽!C 语言宏定义原来可以玩出这些花样?高手必看!