結果
問題 |
No.1051 PQ Permutation
|
ユーザー |
![]() |
提出日時 | 2020-05-08 22:02:22 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,414 bytes |
コンパイル時間 | 2,438 ms |
コンパイル使用メモリ | 202,096 KB |
最終ジャッジ日時 | 2025-01-10 08:43:10 |
ジャッジサーバーID (参考情報) |
judge4 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 33 WA * 13 |
コンパイルメッセージ
main.cpp: In function ‘int main()’: main.cpp:16:22: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 16 | scanf("%d",&A[i]); | ~~~~~^~~~~~~~~~~~
ソースコード
#include <bits/stdc++.h> using namespace std; #define modulo 1000000007 #define mod(mod_x) ((((long long)mod_x+modulo))%modulo) #define Inf 1000000 int main(){ int N,P,Q; cin>>N>>P>>Q; vector<int> A(N); for(int i=0;i<N;i++){ scanf("%d",&A[i]); } vector<int> ans; int ok = -1; int ng = N; while(ng-ok>1){ int mid = (ok+ng)/2; vector<int> B; int p=-1,q=-1; for(int i=0;i<mid;i++){ B.push_back(A[i]); if(A[i]==P)p=i; if(A[i]==Q)q=i; } vector<int> amari; for(int i=mid;i<N;i++)amari.push_back(A[i]); sort(amari.begin(),amari.end()); auto it = upper_bound(amari.begin(),amari.end(),A[mid]); while(it!=amari.end()){ if(p==-1||(*it)!=Q){ B.push_back((*it)); amari.erase(it); break; } else{ it++; } } int t = -1; for(int i=0;i<amari.size();i++){ if(p==-1&&amari[i]==Q){ t = amari[i]; } else{ B.push_back(amari[i]); if(amari[i]==P){ p = 100; if(t!=-1)B.push_back(t); } } } p = -1,q = -1; for(int i=0;i<B.size();i++){ if(B[i]==P)p = i; if(B[i]==Q)q = i; } /* cout<<mid<<endl; for(int i=0;i<B.size();i++){ if(i!=0)cout<<' '; cout<<B[i]; } cout<<endl; */ if(p<q&&B>A){ ok = mid; ans = B; } else{ ng = mid; } } if(ok==-1)cout<<-1<<endl; else{ for(int i=0;i<ans.size();i++){ if(i!=0)cout<<' '; cout<<ans[i]; } cout<<endl; } return 0; }