結果
| 問題 |
No.1051 PQ Permutation
|
| コンテスト | |
| ユーザー |
xenon_motsu
|
| 提出日時 | 2020-05-08 23:16:08 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 4,805 bytes |
| コンパイル時間 | 3,840 ms |
| コンパイル使用メモリ | 205,048 KB |
| 最終ジャッジ日時 | 2025-01-10 09:18:45 |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 32 WA * 12 RE * 2 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
template<class T,class U> inline bool chmin(T&x,U y){if(x>y){x=y;return true;}return false;}
template<class T,class U> inline bool chmax(T&x,U y){if(x<y){x=y;return true;}return false;}
#define fr(i,n) for(int i=0;i<(n);++i)
#define Fr(i,n) for(int i=1;i<=(n);++i)
#define ifr(i,n) for(int i=(n)-1;i>=0;--i)
#define iFr(i,n) for(int i=(n);i>0;--i)
int main(){
cin.tie(nullptr);
ios::sync_with_stdio(false);
int n,p,q;
cin>>n>>p>>q;
vector<int> a(n+1),b(n+1);
Fr(i,n) cin>>a[i],b[a[i]]=i;
if(b[p]<b[q]){
vector<int> v;
for(int i=b[p]+1;i<=n;++i) v.push_back(a[i]);
if(next_permutation(v.begin(),v.end())){
Fr(i,b[p]) cout<<a[i]<<" ";
for(auto i:v) cout<<i<<" ";
cout<<endl;
return 0;
}
reverse(v.begin(),v.end());
if(a[b[p]]<a[b[p]+1]){
reverse(v.begin(),v.end());
int I=lower_bound(v.begin(),v.end(),p)-v.begin();
if(I==v.size()){
cout<<-1<<endl;
return 0;
}
int A=p;
swap(A,v[I]);
if(A==q){
I=lower_bound(v.begin(),v.end(),q)-v.begin();
if(I==v.size()){
cout<<-1<<endl;
return 0;
}
swap(A,v[I]);
}
fr(i,v.size()){
if(v[i]==p){
Fr(t,b[p]-1) cout<<a[t]<<" ";
cout<<A<<" ";
for(auto&t:v) cout<<t<<" ";
cout<<endl;
return 0;
}
if(v[i]==q){
Fr(t,b[p]-1) cout<<a[t]<<" ";
cout<<A<<" ";
fr(t,i) cout<<v[t]<<" ";
int t=i+1;
for(;v[t]<=p;++t) cout<<v[t]<<" ";
cout<<q<<" ";
for(;t<v.size();++t) cout<<v[t]<<" ";
cout<<endl;
return 0;
}
}
}
iFr(j,b[p]-1) if(a[j]<a[j+1]){
for(int i=j;i<=b[p];++i) v.push_back(a[i]);
sort(v.begin(),v.end());
int I=lower_bound(v.begin(),v.end(),a[j])-v.begin();
if(I==v.size()){
cout<<-1<<endl;
return 0;
}
int A=a[j];
swap(A,v[I]);
if(A==p){
fr(i,j) cout<<a[i]<<" ";
cout<<A<<" ";
for(auto&i:v) cout<<i<<" ";
cout<<endl;
return 0;
}
if(A==q){
I=lower_bound(v.begin(),v.end(),q)-v.begin();
if(I==v.size()){
cout<<-1<<endl;
return 0;
}
swap(A,v[I]);
}
fr(i,v.size()){
if(v[i]==p){
Fr(t,j-1) cout<<a[t]<<" ";
cout<<A<<" ";
for(auto&t:v) cout<<t<<" ";
cout<<endl;
return 0;
}
if(v[i]==q){
Fr(t,j-1) cout<<a[t]<<" ";
cout<<A<<" ";
fr(t,i) cout<<v[t]<<" ";
int t=i+1;
for(;v[t]<=p;++t) cout<<v[t]<<" ";
cout<<q<<" ";
for(;t<v.size();++t) cout<<v[t]<<" ";
cout<<endl;
return 0;
}
}
}
cout<<"-1"<<endl;
return 0;
}
vector<int> v;
for(int i=b[q]+1;i<=n;++i) v.push_back(a[i]);
sort(v.begin(),v.end());
int I=lower_bound(v.begin(),v.end(),q)-v.begin();
if(I==v.size()){
cout<<-1<<endl;
return 0;
}
int A=q;
swap(A,v[I]);
if(A==p){
fr(i,b[q]) cout<<a[i]<<" ";
cout<<A<<" ";
for(auto&i:v) cout<<i<<" ";
cout<<endl;
return 0;
}
fr(i,v.size()){
if(v[i]==p){
Fr(t,b[q]-1) cout<<a[t]<<" ";
cout<<A<<" ";
for(auto&t:v) cout<<t<<" ";
cout<<endl;
return 0;
}
if(v[i]==q){
Fr(t,b[q]-1) cout<<a[t]<<" ";
cout<<A<<" ";
fr(t,i) cout<<v[t]<<" ";
int t=i+1;
for(;v[t]<=p;++t) cout<<v[t]<<" ";
cout<<q<<" ";
for(;t<v.size();++t) cout<<v[t]<<" ";
cout<<endl;
return 0;
}
}
}
xenon_motsu