A. Amazing Trick
思路
对于p数组,每个数只有两个禁止的位置不能是自己,并且a[pi]也不是。
也就是每个点限制有两个位置不能放,可行的种类有很多,但是模拟起来又
较复杂,所以采用随机数
代码
/* 可能的情况有很多,直接使用随机数就可以了 只要不和两个位置重合就可以了 */ #include <bits/stdc++.h> using namespace std; const int M = 1e5 + 5; mt19937 rng((unsigned int) chrono::steady_clock::now().time_since_epoch().count());//随机数 int a[M], p[M], q[M]; void solve() { int n; cin >> n; for(int i = 1; i <= n; i++)cin >> a[i]; for(int i = 1; i <= n; i++)p[i] = i; int cnt = 1000; while(cnt--) { bool flag = 1; shuffle(p + 1, p + 1 + n, rng); for(int i = 1; i <= n; i++) if(p[i] == i || a[p[i]] == i)flag = 0; if(flag) { cout <<"Possible\n"; for(int i = 1; i <= n; i++)cout << p[i] << ' '; cout << '\n'; for(int i = 1; i <= n; i++)p[i] = a[p[i]], q[p[i]] = i; for(int i = 1; i <= n; i++)cout << q[i] << ' '; cout << '\n'; return ; } } cout <<"Impossible\n"; } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int TT; cin >> TT; while(TT--) { solve(); } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!