Submission #140579

#TimeUsernameProblemLanguageResultExecution timeMemory
140579luciocfStrange Device (APIO19_strange_device)C++14
20 / 100
5050 ms524292 KiB
#include <bits/stdc++.h>

#define ff first
#define ss second

using namespace std;

typedef long long ll;
typedef pair<ll, ll> pii;

int n;
ll A, B;

void solve_1(void)
{
	ll l, r;
	scanf("%lld %lld", &l, &r);

	ll x = (r-l+1)/B;
	ll g = A/__gcd(B+1, A);

	if (x >= g)
		printf("%lld\n", B*g);
	else
		printf("%lld\n", r-l+1);
}

void solve_2(void)
{
	set<ll> st;
	for (int i = 1; i <= n; i++)
	{
		ll l, r;
		scanf("%lld %lld", &l, &r);

		for (ll j = l; j <= r; j++)
			st.insert(j);
	}

	map<pair<ll, ll>, int> mp;

	int ans = 0;

	for (auto t: st)
	{
		ll x = (t + t/B)%A;
		ll y = t%B;

		if (!mp[{x, y}]) ans++;

		mp[{x, y}] = 1;
	}

	printf("%d\n", ans);
}

void solve_4(void)
{
	vector<pii> V;

	if (A%2 == 0) A /= 2ll;

	bool ok = 0;

	for (int i = 1; i <= n; i++)
	{
		ll l, r;
		scanf("%lld %lld", &l, &r);

		if (r-l+1 >= A)
		{
			ok = 1;
		}
		else
		{
			if (l%A <= r%A)
			{
				V.push_back({l%A, r%A});
			}
			else
			{
				V.push_back({l%A, A-1});
				V.push_back({0, r%A});
			}
		}
	}

	if (ok)
	{
		printf("%lld\n", A);
		return;
	}

	sort(V.begin(), V.end());

	ll ans = V[0].ss-V[0].ff+1, last = V[0].ss;

	for (int i = 1; i < V.size(); i++)
	{
		ll l = V[i].ff, r = V[i].ss;

		if (l > last)
		{
			ans += r-l+1;
			last = r;
		}
		else
		{
			if (r > last)
			{
				ans += r-last;
				last = r;
			}
		}
	}

	printf("%lld\n", ans);
}

int main(void)
{
	scanf("%d %lld %lld", &n, &A, &B);

	if (n == 1)
	{
		solve_1();
		return 0;
	}

	if (B == 1)
	{
		solve_4();
		return 0;
	}

	solve_2();
}

Compilation message (stderr)

strange_device.cpp: In function 'void solve_4()':
strange_device.cpp:98:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 1; i < V.size(); i++)
                  ~~^~~~~~~~~~
strange_device.cpp: In function 'void solve_1()':
strange_device.cpp:17:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%lld %lld", &l, &r);
  ~~~~~^~~~~~~~~~~~~~~~~~~~~
strange_device.cpp: In function 'void solve_2()':
strange_device.cpp:34:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%lld %lld", &l, &r);
   ~~~~~^~~~~~~~~~~~~~~~~~~~~
strange_device.cpp: In function 'void solve_4()':
strange_device.cpp:68:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%lld %lld", &l, &r);
   ~~~~~^~~~~~~~~~~~~~~~~~~~~
strange_device.cpp: In function 'int main()':
strange_device.cpp:122: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);
  ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...