제출 #974657

#제출 시각아이디문제언어결과실행 시간메모리
974657AbitoStrange Device (APIO19_strange_device)C++17
5 / 100
3276 ms524288 KiB
#include <bits/stdc++.h>
#define F first
#define S second
#define pb push_back
#define ppb pop_back
#define ep insert
#define endl '\n'
#define elif else if
#define pow pwr
#define sqrt sqrtt
#define int long long
#define ll long long
typedef unsigned long long ull;
using namespace std;
const int N=1e6+5;
int n,a,b,l[N],r[N];
pair<int,int> f(int x){
    return {(x+x/b)%a,x%b};
}
map<pair<int,int>,int> mp;
int32_t main(){
    ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
    cin>>n>>a>>b;
    for (int i=1;i<=n;i++) cin>>l[i]>>r[i];
    vector<pair<int,int>> v;
    v.pb(f(0));mp[f(0)]=0;
    for (int i=1;;i++){
        if (mp.find(f(i))!=mp.end()) break;
        v.pb(f(i));
        mp[f(i)]=i;
    }int sz=v.size();//cout<<sz<<endl;
    vector<pair<int,int>> rng;
    for (int i=1;i<=n;i++){
        if (r[i]-l[i]+1>=sz) rng.pb({0,sz-1});
        int L=mp[f(l[i])],R=(L+r[i]-l[i]);
        if (R%sz>=L) rng.pb({L,R%sz});
        else{
            rng.pb({L,sz-1});
            rng.pb({0,R%sz});
        }
    }
    sort(rng.begin(),rng.end());
    set<pair<int,int>> s;
    pair<int,int> cur=rng[0];
    for (auto u:rng){
        int l=max(u.F,cur.F),r=min(u.S,cur.S);
        if (l>r){
            s.ep(cur);
            cur=u;
        }
        else{
            cur.F=min(cur.F,u.F);
            cur.S=max(cur.S,u.S);
        }
    }
    s.ep(cur);
    int ans=0;
    for (auto u:s) ans+=u.S-u.F+1;
    cout<<ans<<endl;
    return 0;
}
#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...