Cod sursa(job #1787705)

Utilizator andrei_diaconuAndrei Diaconu andrei_diaconu Data 24 octombrie 2016 22:10:06
Problema Consecutive Scor 100
Compilator cpp Status done
Runda Arhiva ICPC Marime 0.98 kb
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

ifstream f("consecutive.in");
ofstream g("consecutive.out");

int t;
long long n;
vector< pair<int, int> > all;

bool cmp(const pair<int, int> p1, const pair<int, int> p2)
{
	return p1.second - p1.first < p2.second - p2.first;
}

int main()
{
	f >> t;
	for (; t--; ) {
		f >> n;

		all.clear();
		long long tmp = 2 * n;
		for (int i = 2; 1LL * i*i <= tmp; i++) {
			if (tmp%i == 0) {
				long long first = tmp / i - (i - 1);
				long long second = i - (tmp / i - 1);
				
				if (first > 0 && first % 2 == 0)
					all.push_back(make_pair(first / 2, first / 2 + i - 1));
				if (second > 0 && second % 2 == 0 && i != tmp / i)
					all.push_back(make_pair(second / 2, second / 2 + tmp / i - 1));
			}
		}

		sort(all.begin(), all.end(), cmp);

		g << all.size() << "\n";
		for (auto it = all.begin(); it != all.end(); it++)
			g << it->first << " " << it->second << "\n";
	}
}