Submission #203829

#TimeUsernameProblemLanguageResultExecution timeMemory
203829georgerapeanuStrange Device (APIO19_strange_device)C++11
100 / 100
864 ms69352 KiB
#include <cstdio>
#include <vector>
#include <algorithm>

using namespace std;

int n;
long long a,b;

vector<pair<long long,int> > events;

long long gcd(long long a,long long b){
    if(b == 0){
        return a;
    }
    return gcd(b,a % b);
}

int main(){

    scanf("%d %lld %lld",&n,&a,&b);

    a /= gcd(a,b + 1);

    vector<pair<long long,long long> > segm;

    for(int i = 1;i <= n;i++){
        long long l,r;
        scanf("%lld %lld",&l,&r);

        if((r - l + 1) / a >= b){
            printf("%lld\n",a * b);
            return 0;
        }

        long long fst = (((l / b) % a) * (b) + (l % b));
        long long snd = (((r / b) % a) * (b) + (r % b));

        if(fst > snd){
            events.push_back({fst,1});
            events.push_back({(a - 1) * (b) + (b - 1) + 1,-1});
            events.push_back({0,1});
            events.push_back({snd + 1,-1});
        }
        else{
            events.push_back({fst,1});
            events.push_back({snd + 1,-1});
        }
    }

    sort(events.begin(),events.end());

    long long ans = 0;
    long long lst = -1;
    int cnt_active = 0;

    for(auto it:events){
        ans += ((long long)(cnt_active > 0)) * (it.first - lst);
        lst = it.first;
        cnt_active += it.second;
    }

    printf("%lld\n",ans);

    return 0;
}

Compilation message (stderr)

strange_device.cpp: In function 'int main()':
strange_device.cpp:21:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d %lld %lld",&n,&a,&b);
     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
strange_device.cpp:29:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%lld %lld",&l,&r);
         ~~~~~^~~~~~~~~~~~~~~~~~~
#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...