Submission #136662

#TimeUsernameProblemLanguageResultExecution timeMemory
136662KLPP이상한 기계 (APIO19_strange_device)C++14
35 / 100
2755 ms49176 KiB
#include<bits/stdc++.h>

using namespace std;
typedef long long int lld;
typedef pair<lld,lld> pii;
#define rep(i,a,b) for(int i=a;i<b;i++)
#define trav(a,v) for(auto a:v)
lld GCD(lld x, lld y){
  if(y==0)return x;
  return GCD(y,x%y);
}

int main(){
  srand(time(NULL));
  lld n,A,B;
  cin>>n>>A>>B;
  /*n=1;
  A=rand()%100;
  B=rand()%100;*/
  lld l[n];
  lld r[n];
  rep(i,0,n){
    cin>>l[i]>>r[i];
    /*l[i]=rand()%200;
    r[i]=rand()%200;
    if(l[i]>r[i])swap(l[i],r[i]);*/
  }
  lld D=GCD(A,B+1);
  D=A/D;
  vector<pii> seg;
  rep(i,0,n){
    if(r[i]-l[i]+1>=D*B){
      cout<<D*B<<endl;
      return 0;
    }
    l[i]%=D*B;
    r[i]%=D*B;
    if(l[i]>r[i]){
      seg.push_back(pii(0,r[i]));
      seg.push_back(pii(l[i],D*B-1));
    }else{
      seg.push_back(pii(l[i],r[i]));
    }
  }
  sort(seg.begin(),seg.end());
  stack<pii> s;
  rep(i,0,seg.size()){
    //cout<<seg[i].first<<" "<<seg[i].second<<endl;
    if(s.empty() || seg[i].first>s.top().second){
      s.push(seg[i]);
    }else{
      s.top().second=max(s.top().second,seg[i].second);
    }
  }
  lld ans=0;
  while(!s.empty()){
    //cout<<s.top().first<<" "<<s.top().second<<endl;
    ans+=s.top().second-s.top().first+1;
    //cout<<ans<<endl;
    s.pop();
  }
  cout<<ans<<endl;
  //cout<<s.size()<<" "<<min(r[0]-l[0]+1,D*B)<<" "<<A<<" "<<B<<" "<<l[0]<<" "<<r[0]<<endl;
  //trav(a,s)cout<<a.first<<" "<<a.second<<endl;
  return 0;
}

Compilation message (stderr)

strange_device.cpp: In function 'int main()':
strange_device.cpp:6:33: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 #define rep(i,a,b) for(int i=a;i<b;i++)
strange_device.cpp:47:7:
   rep(i,0,seg.size()){
       ~~~~~~~~~~~~~~             
strange_device.cpp:47:3: note: in expansion of macro 'rep'
   rep(i,0,seg.size()){
   ^~~
#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...