首页 > 其他分享 >A. Amazing Trick

A. Amazing Trick

时间:2023-03-05 17:55:43浏览次数:29  
标签:int TT Trick Amazing solve 随机数

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;
}

标签:int,TT,Trick,Amazing,solve,随机数
From: https://www.cnblogs.com/basicecho/p/17181099.html

相关文章

  • 开发者进阶必备的9个Tips & Tricks!
    优秀的开发人员市场前景是十分广阔的,但想找到一份理想的工作,仅有代码知识是不够的。优秀的工程师应该是一个终身学习者、问题的创造性解决者,着迷于整个软件世界。要成为一......
  • BJGK Che's Trick
    神秘把读题里“有效的信息”圈出来,务必要体现在答案里亚硫磷亚硝;氟乙碳氢硫;次氯氢氰硅;苯酚碳氢铝过滤完,固体蘸着液体,一定要洗涤。电泳,交替,可以吸附正负离子。......
  • Slope Trick
    原理若一个函数满足:连续分段线性凸性则可以使用SlopeTrick来快速维护。我们发现我们可以仅通过记录转折点,转折点处斜率变化,以及一侧的直线即可维护出整个函数。......
  • Slope Trick
    定义本质上是用一个二元组\((S,f(x))\)描述由一堆直线构成的分段函数去优化dp,要求这些分段函数满足凸性。其中\(S\)是一个可重集,\(f(x)\)是一个一次函数。我们定义......
  • Little Useless Trick
    记录一下近期收集到的没用的小\(trick\)。并查集合并树我们考虑去维护这样一种操作:1xy给\(x\)和\(y\)之间连一条无向边。2x询问\(x\)所在的连通块内点的......
  • Slope trick 学习笔记
    Slopetrick学习笔记概述Slopetrick是一种维护凸函数优化dp的方式。通过记录函数的转折点和最右段的一次函数,就可以表示出一个凸函数。一个转折点\(x\)表示在\(......
  • 树上匹配的小trick
    一棵树上有一些黑点和白点,将它们两两配对,配对\((i,j)\)的代价为\(dist(i,j)\),求最小代价。结论:将黑点的权值设为\(1\),白点的权值设为\(-1\),\(S_i\)为\(i\)子树的......
  • 中考物理trick1
    同压强不同密度减去相同高度,比密度\(\rho_Agh_A=\rho_Bgh_B\)同减去\(\Delta_h\)带入展开化简发现只需要比密度杠杆平衡减去同长度或同重力\(l_1F_1=l_2F_2\)姑且平......
  • 一个看起来比较有用的小 trick。
    ABC287Ex-DirectedGraphandQuery其实相当于分步加入点,构成点导出子图。Floyd维护联通性来判断。但是Floyd是\(O(N^3)\)的,非常慢。那么拿bitset维护就能优......
  • Trick 12:各种优美的暴力复杂度
    一些经典的\(\mathcal{O}(n\logn)\)复杂度的暴力美学:启发式合并:多个集合总大小为\(n\),每次合并两个集合并处理信息,若合并\(a,b\)的复杂度为\(\mathcal{O}(\min(......