結果

問題 No.1990 Candy Boxes
ユーザー Rubikun
提出日時 2024-07-20 19:36:52
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
WA  
実行時間 -
コード長 3,130 bytes
コンパイル時間 2,028 ms
コンパイル使用メモリ 198,196 KB
最終ジャッジ日時 2025-02-23 17:19:54
ジャッジサーバーID
(参考情報)
judge1 / judge5
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 5
other AC * 70 WA * 1
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return true; } return false; }
template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return true; } return false; }
#define all(x) (x).begin(),(x).end()
#define fi first
#define se second
#define mp make_pair
#define si(x) int(x.size())
const int mod=998244353,MAX=300005,INF=15<<26;

int main(){
    
    std::ifstream in("text.txt");
    std::cin.rdbuf(in.rdbuf());
    cin.tie(0);
    ios::sync_with_stdio(false);
    /*
    for(int N=1;N<=10;N++){
        set<vector<int>> SE,SE2;
        queue<vector<int>> Q;
        
        vector<int> A(N+2);
        SE.insert(A);
        Q.push(A);
        
        while(!Q.empty()){
            auto S=Q.front();Q.pop();
            for(int i=1;i<=N;i++){
                if(S[i-1]%2==S[i+1]%2){
                    int sv=S[i];
                    
                    S[i]++;
                    if(S[i]==3) S[i]=1;
                    if(!SE.count(S)){
                        SE.insert(S);
                        Q.push(S);
                    }
                    S[i]=sv;
                }
            }
        }
        
        SE2.insert(A);
        Q.push(A);
        
        while(!Q.empty()){
            auto S=Q.front();Q.pop();
            for(int i=1;i<=N;i++){
                int sv=S[i];
                
                S[i]++;
                if(S[i]==3) S[i]=1;
                if(!SE2.count(S)){
                    SE2.insert(S);
                    Q.push(S);
                }
                S[i]=sv;
            }
        }
        
        int c=0,d=0;
        for(auto X:SE2){
            bool f=true;
            for(int i=1;i<=N;i++) if(X[i]==0) f=false;
            if(!f) continue;
            if(!SE.count(X)){
                c++;
                //for(int x:X) cout<<x<<" ";
                //cout<<endl;
            }else{
                for(int x:X) cout<<x<<" ";
                cout<<" : ";
                for(int i=0;i+1<si(X);i++) cout<<((X[i]^X[i+1])&1)<<" ";
                cout<<endl;
                d++;
            }
        }
        cout<<c<<" "<<d<<endl;
    }
    */
    ll N;cin>>N;
    vector<ll> A(N);
    for(int i=0;i<N;i++) cin>>A[i];
    vector<ll> B;
    for(int i=0;i<N-1;i++){
        B.push_back(A[i]);
        A[i+1]-=A[i];
    }
    if(A.back()){
        cout<<"No\n";
        return 0;
    }
    for(ll x:B){
        if(x<0){
            cout<<"No\n";
            return 0;
        }
    }
    
    int i=0;
    while(i<si(B)){
        if(B[i]==0) i++;
        else{
            int j=i;
            while(j<si(B)&&B[j]) j++;
            vector<int> S;
            S.push_back(B[i]&1);
            for(int k=i+1;k<j;k++) S.push_back((B[k-1]^B[k])&1);
            S.push_back(B[j-1]&1);
            int z=0;
            for(int k=0;k<si(S);k++){
                if(k%2==0) z+=S[k];
                else z-=S[k];
            }
            if(z){
                cout<<"No\n";
                return 0;
            }
            i=j;
        }
    }
    cout<<"Yes\n";
}
0