Submission #221628

#TimeUsernameProblemLanguageResultExecution timeMemory
221628MKopchevStrange Device (APIO19_strange_device)C++14
100 / 100
1050 ms102072 KiB
#include<bits/stdc++.h> using namespace std; const int nmax=1e6+42; const long long inf=1e18; int n; long long A,B; pair<long long,long long> inp[nmax]; vector< pair<long long,long long> > segments; vector< pair<long long,int> > active; bool cmp(pair<long long,int> s,pair<long long,int> t) { if(s.first!=t.first)return s.first<t.first; return s.second>t.second; } int main() { scanf("%i%lld%lld",&n,&A,&B); A=A/__gcd(A,B+1); for(int i=1;i<=n;i++) { scanf("%lld%lld",&inp[i].first,&inp[i].second); if(A>inf/B)segments.push_back(inp[i]); else { if(inp[i].second-inp[i].first+1>=A*B) { printf("%lld\n",A*B); return 0; } inp[i].first=inp[i].first%(A*B); inp[i].second=inp[i].second%(A*B); if(inp[i].first<=inp[i].second)segments.push_back(inp[i]); else { segments.push_back({inp[i].first,A*B-1}); segments.push_back({0,inp[i].second}); } } } for(auto k:segments) { active.push_back({k.first,1}); active.push_back({k.second+1,-1}); //cout<<k.first<<" "<<k.second<<endl; } sort(active.begin(),active.end(),cmp); int sum=1; long long output=0; for(int i=1;i<active.size();i++) { if(sum)output+=active[i].first-active[i-1].first; sum=sum+active[i].second; //cout<<i<<" -> "<<sum<<" "<<output<<" "<<active[i].first<<" "<<active[i].second<<endl; } printf("%lld\n",output); return 0; }

Compilation message (stderr)

strange_device.cpp: In function 'int main()':
strange_device.cpp:65:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=1;i<active.size();i++)
                 ~^~~~~~~~~~~~~~
strange_device.cpp:22:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%i%lld%lld",&n,&A,&B);
     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~
strange_device.cpp:28:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%lld%lld",&inp[i].first,&inp[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...