Cod sursa(job #1140670)

Utilizator alex23alexandru andronache alex23 Data 12 martie 2014 10:15:34
Problema Progresie Scor 100
Compilator cpp Status done
Runda Arhiva ICPC Marime 0.98 kb
#define _CRT_SECURE_NO_DEPRECATE
#include <cstdio>
#include <cmath>

long long T, N, R;

int main()
{
	freopen("progresie.in", "r", stdin);
	freopen("progresie.out", "w", stdout);

	scanf("%lld", &T);
	while (T--)
	{
		scanf("%lld %lld", &N, &R);

		for (int i = 0;; ++i)
		{
			long long start = 1LL * i * (i + 1) + 1;
			long long margin = i;
			bool isSol = true;

			for (int j = 1; j < N; ++j)
			{
				long long start_t = start + 1LL * j * R;
				long long end_t = start_t + margin;
				int r = sqrt(start_t - 1);
				long long start_i = 1LL * r * (r + 1) + 1;
				long long end_i = 1LL * (r + 1) * (r + 1);
				if (end_t < start_i)
				{
					isSol = false;
					break;
				}
				if (start_t < start_i)
				{
					start += start_i - start_t;
					margin -= start_i - start_t;
				}
				else if (end_t > end_i)
				{
					margin -= end_t - end_i;
				}
			}
			if (isSol)
			{
				printf("%lld\n", start);
				break;
			}
		}
	}

	return 0;
}