Submission #1316335

#TimeUsernameProblemLanguageResultExecution timeMemory
1316335wangzhiyi33Strange Device (APIO19_strange_device)C++20
100 / 100
626 ms78724 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ii pair<int,int>
#define fir first
#define sec second
#define pb push_back

int inf=1e18;

signed main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);

    int n,a,b;
    cin>>n>>a>>b;

    int brp=a/__gcd(a,(b+1));
    int mod;

    if(inf/brp>=b){
        mod=brp*b;
    }
    else{
        mod=-1;
    }

    int l[n+1],r[n+1];
    int tot=0,mx=0;

    for(int q=1;q<=n;q++){
        cin>>l[q]>>r[q];
        tot+=(r[q]-l[q]+1);
        mx=max(mx,r[q]-l[q]+1);
    }
    // cout<<mod<<endl;
    if(mod==-1){
        cout<<tot<<endl;
    }
    else{
        if(mx>=mod){
            cout<<mod<<endl;
        }
        else{
            map<int,int>mp;
            for(int q=1;q<=n;q++){
                l[q]%=mod,r[q]%=mod;

                if(l[q]<=r[q]){
                    mp[l[q]]++,mp[r[q]+1]--;
                }
                else{
                    mp[l[q]]++;mp[mod]--;
                    mp[0]++,mp[r[q]+1]--;
                }
            }

            int tot=0,prv=0;
            int ans=0;

            for(auto x : mp){
                
                if(tot){
                    ans+=(x.fir-prv);
                }
                tot+=x.sec;
                prv=x.fir;
            }

            cout<<ans<<endl;
            
        }
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...