結果

問題 No.100 直列あみだくじ
ユーザー 👑 CleyL
提出日時 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
権限があれば一括ダウンロードができます

ソースコード

diff #

#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;
}
0