QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#219914#5199. Amazing Tricksuibian_xiaozhaoWA 1ms3604kbC++202.2kb2023-10-19 19:46:402023-10-19 19:46:40

Judging History

你现在查看的是最新测评结果

  • [2023-10-19 19:46:40]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:3604kb
  • [2023-10-19 19:46:40]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);


using ll = long long;
#define int ll
#define endl "\n"
#define no cout << "NO" << endl
#define yes cout << "YES" << endl
#define pii pair<int,int>
#define ary(i) array<ll,(i)>
#define all(x) x.begin(),x.end()
const int maxn=2e5+7;
const int inf=numeric_limits<int>::max();
const int inf2=0x3f3f3f3f3f3f3f3;
const int inff=numeric_limits<int>::min();
const int mod=998244353;

const int limit =310;
const int maxsize =limit*limit;
int f[limit][maxsize+limit]={0};

int a[limit]={0};

void solve(){
    int n;
    cin>>n;
    vector<int> a(n+3,0);
    vector<bool> vis(n+3,false);
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    vector<int> cy;
    auto dfs=[&](auto dfs,int x){
        if(vis[x]) return;
        vis[x]=true;
        cy.push_back(x);
        dfs(dfs,a[x]);
    };
    vector<vector<int>> _v2;
    vector<int> P;

    for(int i=1;i<=n;i++){
        if(vis[i])continue;
        cy.clear();
        dfs(dfs,i);
        if(cy.size()==2){
            _v2.push_back(cy);
        }else{
            for(auto x:cy){
                P.push_back(x);
            }
        }
    }
    if(_v2.size()>=2){
        for(auto & i : _v2){
            P.push_back(i[0]);
        }
        for(auto & i : _v2){
            P.push_back(i[1]);
        }
    } else if(_v2.size()==1){
        if(n<4) {
            cout << "Impossible" << endl;
            return;
        }
        else {
            auto it =P.begin();
            it++;
            P.insert(it,_v2[0][0]);
            P.push_back(_v2[0][1]);
        }
    }
    cout << "Possible" << endl;
    vector<int> p(n+3),q(n+3),b(n+3);
    for(int i=0;i<n;i++){
        p[P[i]]=P[(i+1)%n];
    }
    for(int i=1;i<=n;i++)
        b[i]=a[p[i]];
    for(int i=1;i<=n;i++)
        q[b[i]]=i;
    for(int i=1;i<=n;i++)
        cout<<p[i]<<" ";
    cout<<endl;
    for(int i=1;i<=n;i++)
        cout<<q[i]<<" ";
    cout<<endl;
}

#undef int



int main()
{
    IOS
    int n;
    cin>>n;
    // n=1;
    while(n--){
        solve();
    }

}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 3604kb

input:

4
2
2 1
3
1 2 3
4
2 1 4 3
5
5 1 4 2 3

output:

Impossible
Possible
2 3 1 
3 1 2 
Possible
3 4 2 1 
3 4 2 1 
Possible
5 1 4 2 3 
4 3 1 5 2 

result:

ok 3/4 are 'Possible' (4 test cases)

Test #2:

score: -100
Wrong Answer
time: 0ms
memory: 3604kb

input:

50
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1

output:

Possible
1 
1 
Possible
1 
1 
Possible
1 
1 
Possible
1 
1 
Possible
1 
1 
Possible
1 
1 
Possible
1 
1 
Possible
1 
1 
Possible
1 
1 
Possible
1 
1 
Possible
1 
1 
Possible
1 
1 
Possible
1 
1 
Possible
1 
1 
Possible
1 
1 
Possible
1 
1 
Possible
1 
1 
Possible
1 
1 
Possible
1 
1 
Possible
1 
1 
...

result:

wrong answer Permutation has fixed point: 1 (test case 1)