結果
問題 |
No.397 NO MORE KADOMATSU
|
ユーザー |
![]() |
提出日時 | 2016-07-16 19:53:45 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 27 ms / 2,000 ms |
コード長 | 1,291 bytes |
コンパイル時間 | 1,949 ms |
コンパイル使用メモリ | 175,616 KB |
実行使用メモリ | 25,448 KB |
平均クエリ数 | 28.00 |
最終ジャッジ日時 | 2024-07-17 00:13:16 |
合計ジャッジ時間 | 4,013 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 18 |
ソースコード
#include<bits/stdc++.h> using namespace std; typedef pair<int,int> P; vector<P> mysort(vector<int> A,int m){ vector<P> res; int N=A.size(); for(int i=0;i<N;i++)A[i]*=m; for(int i=0;i<N;i++){ int bottom=A[i],id=i; for(int j=N-1;j>i;j--) if(bottom>A[j]){ bottom=A[j]; id=j; } if(id!=i){ res.push_back(P(i,id)); swap(A[i],A[id]); } } return res; } void print(vector<P>& v){ cout<<v.size()<<endl; for(auto &p:v)cout<<p.first<<" "<<p.second<<endl; string s;cin>>s; } bool checkKadomatsu(int a,int b,int c){ return (a!=c&&((a>b&&b<c)||(a<b&&b>c))); } bool test(vector<P>& v,vector<int> A){ for(auto &it:v){ swap(A[it.first],A[it.second]); } int N=A.size(); for(int i=0;i+2<N;i++){ //cout<<A[i]<<A[i+1]<<A[i+2]<<endl; if(checkKadomatsu(A[i],A[i+1],A[i+2]))return false; } return true; } vector<P> unko(int N){ vector<P> res; for(int i=0;i+5<N;i+=6) res.push_back(P(i+3,i+5)); res.push_back(P(0,N-2)); return res; } int main(){ int N;cin>>N; vector<int> A(N); for(auto &it:A)cin>>it; auto p=mysort(A,1); auto q=mysort(A,-1); if(p.size()<q.size())q=p; auto kuso=unko(N); if(test(kuso,A)&&kuso.size()<q.size())q=kuso; print(q); return 0; }