답안 #196913

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
196913 2020-01-17T16:06:18 Z tincamatei 이상한 기계 (APIO19_strange_device) C++14
0 / 100
12 ms 376 KB
#include <bits/stdc++.h>

using namespace std;

const long long INF = 1LL << 62;

long long gcd(long long a, long long b) {
	long long r;
	while(b > 0) {
		r = a % b;
		a = b;
		b = r;
	}
	return a;
}

set<pair<long long, long long> > ranges;

long long insertRange(long long a, long long b) {
	set<pair<long long, long long> >::iterator it;

	it = ranges.lower_bound(make_pair(a, -INF));

	if(it != ranges.begin()) {
		set<pair<long long, long long> >::iterator it2;
		it2 = it;
		it2--;

		if(it2->second >= a) {
			it--;
			a = it->first;
		}
	}
	
	long long rez = 0LL;
	vector<pair<long long, long long> > toErase;
	while(it != ranges.end() && it->first <= b) {
		toErase.push_back(*it);
		rez = rez - (it->second - it->first + 1);
		b = it->second;
		it++;
	}

	for(auto it: toErase)
		ranges.erase(it);
	ranges.insert(make_pair(a, b));
	rez = rez + b - a + 1;

	return rez;
}

int main() {
	int n;
	long long A, B, loopSize, xSkip, convolutions;

	scanf("%d%lld%lld", &n, &A, &B);
	xSkip = B % A + 1;
	convolutions = A / gcd(A, xSkip);

	if(convolutions <= INF / B)
		loopSize = B * convolutions;
	else
		loopSize = INF;
	printf("Loopsize: %lld\n", loopSize);

	long long rez = 0LL;
	for(int i = 0; i < n; ++i) {
		int l, r;
		scanf("%d%d", &l, &r);
		
		if(r - l + 1 >= loopSize)
			rez = rez + insertRange(0, loopSize - 1);
		else {
			l = l % loopSize;
			r = r % loopSize;

			if(r >= l)
				rez = rez + insertRange(l, r);
			else {
				rez = rez + insertRange(0, r) +
				            insertRange(l, loopSize - 1);
			}
		}
	}

	printf("%lld\n", rez);

	return 0;
}

Compilation message

strange_device.cpp: In function 'int main()':
strange_device.cpp:56:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%lld%lld", &n, &A, &B);
  ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
strange_device.cpp:69:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d%d", &l, &r);
   ~~~~~^~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 376 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 12 ms 248 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 256 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 256 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 256 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 256 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 376 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 376 KB Output isn't correct
2 Halted 0 ms 0 KB -