A. Amazing Trick

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;
}
posted @   basicecho  阅读(64)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示