結果
問題 | No.2740 Old Maid |
ユーザー |
|
提出日時 | 2024-04-13 19:41:12 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 94 ms / 2,000 ms |
コード長 | 893 bytes |
コンパイル時間 | 2,255 ms |
コンパイル使用メモリ | 197,532 KB |
最終ジャッジ日時 | 2025-02-21 01:16:19 |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 62 |
ソースコード
#include <bits/stdc++.h>using namespace std;#define rep(i,n) for(int i=0;i<(int)(n);i++)int main() {int N;cin>>N;vector<int> p(N);rep(i,N) cin>>p.at(i);rep(i,N) p.at(i)--;vector<int> rp(N);rep(i,N) rp.at(p.at(i))=i;vector<int> nx(N); // 要素iの次の要素rep(i,N){if(rp.at(i)==N-1) nx.at(i)=-1;else nx.at(i)=p.at(rp.at(i)+1);}vector<int> stl(N,0);auto get_next=[&](auto self,int x){if(x==-1||!stl.at(x)) return x;return nx.at(x)=self(self,nx.at(x));};vector<int> ans;rep(i,N){if(stl.at(i)) continue;stl.at(i)=1;int j=get_next(get_next,i);if(j==-1){stl.at(i)=0;continue;}stl.at(j)=1;ans.push_back(i);ans.push_back(j);}for(int x:ans) cout<<x+1<<" ";cout<<"\n";}