Submission #1057631

#TimeUsernameProblemLanguageResultExecution timeMemory
1057631DucNguyen2007Strange Device (APIO19_strange_device)C++14
100 / 100
377 ms115960 KiB
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ld long double
#define pii pair<int,int>
#define pll pair<ll,ll>
#define fi first
#define se second
const int maxN=1e6+5;
const ll inf=2e18;
int n;
ll a,b;
pll p[maxN+1];
set<pll> se;
int main()
{
    //freopen("","r",stdin);
    //freopen("","w",stdout);
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin>>n>>a>>b;
    for(int i=1;i<=n;i++)
    {
        cin>>p[i].fi>>p[i].se;
    }
    ll x=inf,d=__gcd(a,b+1);
    if((ld)1.0*inf/b<a/d)
    {
        x=inf;
    }
    else x=b*(a/d);
    for(int i=1;i<=n;i++)
    {
        if(p[i].se-p[i].fi+1>=x)
        {
            cout<<x;
            return 0;
        }
        ll lmod=p[i].fi%x,rmod=p[i].se%x;
        if(lmod>rmod)
        {
            se.insert({lmod,x-1});
            se.insert({0,rmod});
        }
        else se.insert({lmod,rmod});
    }
    ll ans=0,mx=-1;
    for(auto i:se)
    {
        ans+=max(0ll,i.se-max(mx+1,i.fi)+1);
        mx=max(mx,i.se);
    }
    cout<<ans;
}
#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...