Submission #266710

#TimeUsernameProblemLanguageResultExecution timeMemory
266710anubhavdharStrange Device (APIO19_strange_device)C++14
100 / 100
3447 ms72664 KiB
#include<bits/stdc++.h> #define ll long long #define pb push_back #define mp make_pair #define pii pair<int, int> #define pll pair<ll, ll> #define ff first #define ss second #define vi vector<int> #define vl vector<ll> #define vii vector<pii> #define vll vector<pll> #define FOR(i,N) for(i=0;i<(N);++i) #define FORe(i,N) for(i=1;i<=(N);++i) #define FORr(i,a,b) for(i=(a);i<(b);++i) #define FORrev(i,N) for(i=(N);i>=0;--i) #define F0R(i,N) for(int i=0;i<(N);++i) #define F0Re(i,N) for(int i=1;i<=(N);++i) #define F0Rr(i,a,b) for(ll i=(a);i<(b);++i) #define F0Rrev(i,N) for(int i=(N);i>=0;--i) #define all(v) (v).begin(),(v).end() #define dbgLine cerr<<" LINE : "<<__LINE__<<"\n" #define ldd long double using namespace std; const int Alp = 26; const int __PRECISION = 9; const int inf = 1e9 + 8; const ldd PI = acos(-1); const ldd EPS = 1e-7; const ll MOD = 1e9 + 7; const ll MAXN = 2e5 + 5; const ll ROOTN = 320; const ll LOGN = 18; const ll INF = 1e18 + 1022; ll n, A, B, l, r, sm, mxDiff, T; vll V, ranges; ll gcd(ll a, ll b) { if(a > b) swap(a, b); if(b % a == 0) return a; return gcd(b%a, a); } inline void check_period() { ll tmp = gcd(A, B+1); if(log2(A*1.0) + log(B*1.0) - log(1.0 * tmp) > 59.99) { cout<<sm<<'\n'; exit(0); } T = B * (A / tmp); if(mxDiff >= T) { cout<<T<<'\n'; exit(0); } } signed main() { /* ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); */ sm = mxDiff = 0; cin>>n>>A>>B; F0R(i, n) { cin>>l>>r; sm += r - l + 1; mxDiff = max(mxDiff, r-l+1); ranges.pb(mp(l, r)); } check_period(); sm = 0; F0R(i, n) { l = ranges[i].ff % T, r = ranges[i].ss % T; V.pb(mp(l, 0)); V.pb(mp(r, 1)); if(l > r) V.pb(mp(T-1, 1)), V.pb(mp(0, 0)); } // cerr<<"period = "<<T<<'\n'; sort(all(V)); // for(pll x : V) // cout<<"("<<x.ff<<','<<x.ss<<")\n"; ll lst = -1, act = 0; for(pll pp : V) { if(act == 0 and pp.ss == 0) ++sm; if(act > 0) sm += pp.ff - lst; if(pp.ss == 0) ++act; else if(pp.ss == 1) --act; lst = pp.ff; } cout<<sm<<'\n'; 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...