Cod sursa(job #1344462)

Utilizator ZappaManIosif Adrian-Mihai ZappaMan Data 16 februarie 2015 19:06:23
Problema Progresie Scor 0
Compilator cpp Status done
Runda Arhiva ICPC Marime 1.34 kb
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <set>
#include <vector>
#include <algorithm>
#include <limits>
using namespace std;
typedef int ull;


ull find_smallest_larger(ull n, vector<ull> & squares) {
	int index = 0;
	while (n > squares[index]) {
		index++;
	}
	return squares[index];
}


int main(int argc, char * argv[]) {

	FILE * i = fopen("progresie.in", "r");
	FILE * o = fopen("progresie.out", "w");
	int T, N, R;
	fscanf(i, "%d\n", &T);
	while (T--) {
		fscanf(i, "%d %d\n", &N, &R);
		ull i = 1;
		ull count = 0;
		ull f_num = 1;
		ull cur = f_num;
		while (true) {

			ull start = i * i - i + 1;
			ull end = i * i;
			ull next_i = i + 1;
			ull next_start = next_i * next_i - next_i + 1;
			ull next_end = next_i * next_i;
			//cout << start << " " << end << " " << cur << " " << f_num << " " << i << " " << count << endl;
			if (cur >= start && cur <= end) {
				count++;
				cur += R;
				if (count >= N) {
					fprintf(o, "%d\n", f_num);
					break;
				}
			}
			else if ((cur > end && cur < next_start) || cur < start) { //bad sequence
				if (f_num >= end) {
					f_num = next_start;
					i = i + 1;
					cur = f_num;
				}
				else {
					f_num++;
					cur = f_num;
				}
				count = 0;
			}
			else {
				cur += R;
				i = i + 1;
			}
		}

	}
	
	return 0;
}