제출 #1321749

#제출 시각아이디문제언어결과실행 시간메모리
1321749wangzhiyi33송금 (JOI19_remittance)C++20
100 / 100
641 ms25316 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long 
#define ii pair<int,int>
#define fir first
#define sec second

signed main(){
    int n; cin>>n;
    int a[n+1],b[n+1];
    bool dlm[n+1]; memset(dlm,false,sizeof dlm);
    queue<int>qu;

    for(int q=1;q<=n;q++){
        cin>>a[q]>>b[q];
        if(a[q]-b[q]>=2){
            dlm[q]=true;
            qu.push(q);
        }
    }

    while(qu.size()){
        int idx=qu.front(); qu.pop();
        int nxt=idx+1; dlm[idx]=false;
        if(nxt==n+1)nxt=1;

        int brp=(a[idx]-b[idx])/2;
        if(brp<=0)continue;
        a[idx]-=2*brp;
        a[nxt]+=brp;

        if(dlm[nxt]==false){
            qu.push(nxt); dlm[nxt]=true;
        }
    }

    bool sama=true;
    for(int q=1;q<=n;q++){
        sama&=(a[q]==b[q]);
    }

    if(sama){
        cout<<"Yes"<<endl; return 0;
    }

    bool satu=true,non=false;
    for(int q=1;q<=n;q++){
        satu&=(a[q]==b[q]+1);
        if(a[q]>1)non=true;
    }

    if(satu && non){
        cout<<"Yes"<<endl;
    }
    else{
        cout<<"No"<<endl;
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...