Cod sursa(job #1709975)

Utilizator cpitting_llamasRotaru Tanase Gherghina cpitting_llamas Data 28 mai 2016 14:39:35
Problema Consecutive Scor 0
Compilator cpp Status done
Runda ONIS 2016 - Runda - 2 - ACM ICPC Romanian Programming Contest Marime 1.28 kb
#include <set>
#include <map>
#include <stack>
#include <cmath>
#include <queue>
#include <string>
#include <limits>
#include <vector>
#include <bitset>
#include <utility>
#include <fstream>
#include <iostream>
#include <algorithm>
#include <unordered_map>
#include <unordered_set>

#define MOD 10001 // daca e nevoie de mod
#define oo 2000000000
#define ooLL (1LL<<60)
#define LSB(x) (x&(-x)) // least significat bit of
#define eps 0.00001

typedef long long ull;
typedef long double ld;

int main()
{
	std::ifstream cin("consecutive.in");
	std::ofstream cout("consecutive.out");
	int test_count;
	cin >> test_count;
	for (auto test_idx = 0; test_idx < test_count; ++test_idx) {
		ull N;
		cin >> N;
		register int count = 0;
		std::vector<std::pair<int, int> > intervals;
		for (register int up_idx = N / 2 + 1; up_idx >= 2; --up_idx) {
			ull part_sum = up_idx * (up_idx + 1) / 2;

			register ull searched_sum = part_sum - N;
			register ull sqt1 = sqrt(1 + 8 * searched_sum);
			if ((sqt1 * sqt1) == (1 + 8 * searched_sum)) {
				intervals.push_back(std::make_pair((-1 + sqt1) / 2, up_idx));
				count++;
			}
		}
		cout << count << "\n";
		for (uint i = 0; i < intervals.size(); ++i) {
			cout << intervals[i].first << " " << intervals[i].second << "\n";
		}
	}
	cin.close();
	cout.close();
	return 0;
}