Submission #252018

#TimeUsernameProblemLanguageResultExecution timeMemory
252018yuma220284Strange Device (APIO19_strange_device)C++14
100 / 100
2329 ms70364 KiB
#include "bits/stdc++.h"
using namespace std;

long long GCD(long long X, long long Y) {
	return (Y == 0 ? X : GCD(Y, X % Y));
}

int main() {
	int N;
	long long A, B;
	cin >> N >> A >> B;
	vector<pair<long long, long long> > P(N);
	for (int i = 0; i < N; i++) {
		cin >> P[i].first >> P[i].second;
	}
	long long C = A / GCD(B + 1, A);
	if (B > 2000000000000000000 / C) {
		long long ANS = 0;
		for (int i = 0; i < N; i++) {
			ANS += P[i].second - P[i].first + 1;
		}
		cout << ANS << endl;
	}
	else {
		long long D = B * C;
		for (int i = 0; i < N; i++) {
			if (P[i].first / D + 2 <= P[i].second / D) {
				cout << D << endl;
				return 0;
			}
		}
		vector<pair<long long, long long> > W;
		for (int i = 0; i < N; i++) {
			if (P[i].first / D == P[i].second / D) W.push_back({ P[i].first % D, P[i].second % D });
			else W.push_back({ P[i].first % D, D - 1 }), W.push_back({ 0, P[i].second % D });
		}
		sort(W.begin(), W.end());
		long long ANS = 0;
		pair<long long, long long> Cur = { 0, -1 };
		for (int i = 0; i < W.size(); i++) {
			if (Cur.second < W[i].first) ANS += Cur.second - Cur.first + 1, Cur = W[i];
			else Cur.second = max(Cur.second, W[i].second);
		}
		ANS += Cur.second - Cur.first + 1;
		cout << ANS << endl;
	}
}

Compilation message (stderr)

strange_device.cpp: In function 'int main()':
strange_device.cpp:40:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int i = 0; i < W.size(); i++) {
                   ~~^~~~~~~~~~
#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...