提交时间:2024-11-26 13:56:10

运行 ID: 35033

#include<bits/stdc++.h> using namespace std; int n,a[500005],b[500005]; bool ed; bool chk(){ int cnt1[10]; memset(cnt1,0,sizeof cnt1); for(int i=1;i<=n;i++)cnt1[b[i]]=1; for(int i=1;i<=n;i++){ bool cnt[10]; memset(cnt,0,sizeof cnt); bool get=0; for(int j=i;j<=n;j++){ cnt[b[j]]=1; bool ok=1; for(int k=1;k<=n;k++)if(cnt[k]!=cnt1[k])ok=0; if(ok&&a[i]!=j)return 0; if(ok)get=1; if(ok)break; } if(!get&&a[i]!=n+1)return 0; } return 1; } void dfs(int p){ if(p>n){ // for(int i=1;i<=n;i++)cout<<b[i]<<" "; // cout<<endl; if(ed)return; if(chk()){ ed=1; cout<<"Yes"<<endl; for(int i=1;i<=n;i++)cout<<b[i]<<" "; cout<<endl; } return; } for(int i=1;i<=n;i++){ b[p]=i; dfs(p+1); if(ed)return; } } void sol(){ ed=0; dfs(1); if(!ed)cout<<"No"<<endl; } void slv(){ bool sub=1; cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; if(a[i]!=i)sub=0; } if(sub){ cout<<"Yes"<<endl; for(int i=1;i<=n;i++)cout<<1<<" "; cout<<endl; return; } else if(n<=5)sol(); else cout<<"No"<<endl; } int main(){ int T;cin>>T;while(T--) slv(); // n=4; // b[1]=2,b[2]=1,b[3]=2,b[4]=1; // a[1]=2,a[2]=3,a[3]=4,a[4]=5; // cout<<chk(); return 0; }