제출 #698855

#제출 시각아이디문제언어결과실행 시간메모리
698855Abrar_Al_Samit이상한 기계 (APIO19_strange_device)C++17
100 / 100
713 ms115872 KiB
#include<bits/stdc++.h>
using namespace std;

long long gcd(long long x, long long y) {
    if (y == 0) return x;
    return gcd(y, x%y);
}
void PlayGround() {
  long long n, a, b;
  cin>>n>>a>>b;

  vector<array<long long,2>>iner(n);
  for(int i=0; i<n; ++i) {
    cin>>iner[i][0]>>iner[i][1];
  }

  long long g = gcd(a, b+1);
  long long interval = (a / gcd(a, b+1));
  bool toobig = false;
  if(log10(interval)+log10(b)>18) {
    toobig = true;
  } else {
    interval *= b;
  }

  for(int i=0; i<n; ++i) {
    long long len = iner[i][1] - iner[i][0] + 1;
    if(!toobig && len>=interval) {
      cout<<interval<<'\n';
      return;
    }
  }

  set<pair<long long, long long>>s;


  for(int i=0; i<n; ++i) {
    long long len = iner[i][1]-iner[i][0]+1;
    long long l = iner[i][0]%interval;
    long long r = iner[i][1]%interval;
    if(!toobig) {
      if(l>r) {
        s.insert({l, interval-1});
        s.insert({0, r});
      } else {
        s.insert({l, r});
      }
    } else {
      s.insert({l, r});
    }
  }

  long long ans = 0;
  while(!s.empty()) {
    auto it = s.begin();
    s.erase(it);
    long long l = it->first, r = it->second;
    if(!s.empty()) {
      auto nx = s.upper_bound(*it);
      if(nx->second>=r) r = min(r, nx->first-1);
      else {
        s.erase(nx);
        s.insert(*it);
        continue;
      }
    }
    ans += max(0LL, r-l+1);
  }
  cout<<ans<<'\n';

  // cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  PlayGround();
  return 0;
}

컴파일 시 표준 에러 (stderr) 메시지

strange_device.cpp: In function 'void PlayGround()':
strange_device.cpp:38:15: warning: unused variable 'len' [-Wunused-variable]
   38 |     long long len = iner[i][1]-iner[i][0]+1;
      |               ^~~
strange_device.cpp:17:13: warning: unused variable 'g' [-Wunused-variable]
   17 |   long long g = gcd(a, b+1);
      |             ^
#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...