Submission #513597

#TimeUsernameProblemLanguageResultExecution timeMemory
513597amukkalirStrange Device (APIO19_strange_device)C++17
100 / 100
978 ms53344 KiB
#include <bits/stdc++.h>
using namespace std; 
typedef long long ll; 
typedef unsigned long long ull; 
 
#define pii pair<int,int> 
#define pll pair<ll, ll> 
#define fi first 
#define se second 
#define pb push_back 
#define mp make_pair
 
ll gcd(ll a, ll b) {
    return b == 0 ? a : gcd(b, a%b); 
}
  
int n; 
ll a, b; 
 
signed main () {
    scanf("%d %lld %lld", &n, &a, &b); 
 
    vector<pll> v; 
    for(int i=0; i<n; i++) {
        ll l, r; scanf("%lld %lld", &l, &r); 
        v.pb(mp(l,r)); 
    }
    
    
    ull ans = 0; 
    //if r max < a*b / gcd(a, b+1)
 
    if(v.back().se / b < a / gcd(a, b+1)) { 
        for(int i=0; i<n; i++) {
            ans += v[i].se - v[i].fi + 1; 
        }
    } else {
        ll c = a/gcd(a, b+1) * b; 
 
        for(int i=0; i<n; i++) {
            if(v[i].se % c < v[i].fi % c || v[i].se >= v[i].fi + c) {
                v.pb(mp(0, v[i].se % c)); 
                v[i].se = c-1; 
            }
 
            v[i].fi %= c; 
            v[i].se %= c; 
        }
 
        cerr << c << endl; 
 
        sort(v.begin(), v.end(), [&] (pll a, pll b) {
            if(a.fi % c == b.fi % c) return a.se % c < b.se % c; 
            return a.fi % c < b.fi % c; 
        }); 
 
        //(auto p : v) cout << p.fi << " " << p.se << endl; 
        for(int i=0; i<v.size(); i++) {
            int l = i, r = i; 
            ll vl = v[i].fi, vr = v[i].se; 
 
            while(r + 1 < v.size() && v[r+1].fi <= vr) {
                vr = max(vr, v[r+1].se); 
                //cout << " :: " << vl << " " << vr << endl; 
                r++; 
            } 
                
            ans += vr - vl + 1; 
            
            i = r; 
        }
    }
 
    printf("%llu", ans); 
}

Compilation message (stderr)

strange_device.cpp: In function 'int main()':
strange_device.cpp:58:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   58 |         for(int i=0; i<v.size(); i++) {
      |                      ~^~~~~~~~~
strange_device.cpp:62:25: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   62 |             while(r + 1 < v.size() && v[r+1].fi <= vr) {
      |                   ~~~~~~^~~~~~~~~~
strange_device.cpp:59:17: warning: unused variable 'l' [-Wunused-variable]
   59 |             int l = i, r = i;
      |                 ^
strange_device.cpp:21:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   21 |     scanf("%d %lld %lld", &n, &a, &b);
      |     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
strange_device.cpp:25:23: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   25 |         ll l, r; 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...