题解:CF2049C MEX Cycle
做过最有意思的构造题。
假设没有 和 影响思维,这道题就变得比较好做。
- 偶数,则以 为例,可以构造如下:
0 1 0 1 0 1
容易发现是 如此循环
- 奇数类似,循环后加一个 ,刚好满足,以 为例:
0 1 0 1 0 1 2
难点在于 ,但不用慌,找一下规律。
奇数
- 如果 和 目前都是 或 ,并且 与 相邻( 也可以,下文同),即为 或 ,交换 和 即可。
- 否则 设为 。
偶数
类似,但由于没有元素 ,无需判断,只要 和 目前都是 或 ,就将 设为 。
上述东西都很好理解,拿出草稿纸举个例子就能明白。
给出代码:
#include<bits/stdc++.h>
using namespace std;
int t, n, x, y, a[200005];
int main(){
cin >> t;
while(t --){
cin >> n >> x >> y;
if(n & 1){
for(int i = 2; i <= n; i += 2) a[i - 1] = 0, a[i] = 1; a[n] = 2;
if(a[x] == 0 && a[y] == 0){
if(x == n - 1 || x == 1) swap(a[x], a[n]);
else a[x] = 2;
}
if(a[x] == 1 && a[y] == 1){
if(x == n - 1 || x == 1) swap(a[x], a[n]);
else a[x] = 2;
}
}
else{
for(int i = 1; i <= n; i += 2) a[i] = 0, a[i + 1] = 1;
if(a[x] == 0 && a[y] == 0){
a[x] = 2;
}
if(a[x] == 1 && a[y] == 1){
a[x] = 2;
}
}
for(int i = 1; i <= n; i ++) cout << a[i] << " ";
cout << "\n";
}
return 0;
}
posted on 2024-12-22 09:50 zhangzirui66 阅读(6) 评论(0) 编辑 收藏 举报 来源
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效