Submission #246801

#TimeUsernameProblemLanguageResultExecution timeMemory
246801arnold518Strange Device (APIO19_strange_device)C++14
100 / 100
580 ms69652 KiB
#include <bits/stdc++.h>
using namespace std;
 
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
 
const int MAXN = 1e6;
const ll INF = numeric_limits<ll>::max();
 
ll a, b, n, ans;
pll arr[MAXN+10];
 
int main()
{
    int i, j;
 
    scanf("%lld%lld%lld", &n, &a, &b);
    for(i=1; i<=n; i++) scanf("%lld%lld", &arr[i].first, &arr[i].second);
 
    ll g=__gcd(a, b+1);
    a/=g;
 
    bool over = false;
    if(INF/b<a) over=true;
    else a*=b;
 
    if(over)
    {
        for(i=1; i<=n; i++) ans+=arr[i].second-arr[i].first+1;
        return !printf("%lld", ans);
    }
 
    vector<pll> A;
    for(i=1; i<=n; i++)
    {
        if(arr[i].second-arr[i].first+1>=a) return !printf("%lld", a);
        arr[i].first%=a;
        arr[i].second%=a;
 
        if(arr[i].second<arr[i].first) A.push_back({arr[i].first, a-1}), A.push_back({0, arr[i].second});
        else A.push_back(arr[i]);
    }
 
    sort(A.begin(), A.end());
 
    ll s=-1, e=-2;
    for(i=0; i<A.size(); i++)
    {
        if(e<A[i].first) ans+=e-s+1, s=A[i].first;
        e=max(e, A[i].second);
    }
    ans+=e-s+1;
    printf("%lld", ans);
}

Compilation message (stderr)

strange_device.cpp: In function 'int main()':
strange_device.cpp:48:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(i=0; i<A.size(); i++)
              ~^~~~~~~~~
strange_device.cpp:16:12: warning: unused variable 'j' [-Wunused-variable]
     int i, j;
            ^
strange_device.cpp:18:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%lld%lld%lld", &n, &a, &b);
     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
strange_device.cpp:19:30: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     for(i=1; i<=n; i++) scanf("%lld%lld", &arr[i].first, &arr[i].second);
                         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...