結果
問題 | No.100 直列あみだくじ |
ユーザー |
👑 |
提出日時 | 2022-07-26 14:56:55 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 3 ms / 5,000 ms |
コード長 | 837 bytes |
コンパイル時間 | 974 ms |
コンパイル使用メモリ | 81,296 KB |
最終ジャッジ日時 | 2025-01-30 14:16:41 |
ジャッジサーバーID (参考情報) |
judge2 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 45 |
ソースコード
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main(){ int n;cin>>n; vector<int> A(n); for(int i = 0; n > i; i++)cin>>A[i],A[i]--; vector<bool> B(n); vector<int>ret; for(int i = 0; n > i; i++){ if(B[i])continue; int nw = i; int c = 0; while(!B[nw]){ B[nw] = true; nw = A[nw]; c++; } if(c%2 == 0)ret.push_back(c); } sort(ret.begin(),ret.end(),greater<int>()); for(int i = 0; ret.size() > i; i+=2){ if(i+1 == ret.size()){ if(ret[i] != 1){ cout << "No" << endl; return 0; } }else if(ret[i]-ret[i+1] > 1){ cout << "No" << endl; return 0; } } cout << "Yes" << endl; }