Cod sursa(job #1715149)

Utilizator greenadexIulia Harasim greenadex Data 9 iunie 2016 23:25:10
Problema Consecutive Scor 100
Compilator cpp Status done
Runda Arhiva ICPC Marime 0.94 kb
#include <bits/stdc++.h>

#define pb push_back
#define f first
#define s second
#define pii pair<long long, long long>
#define mp make_pair
 
using namespace std;
 
const string name = "consecutive",
             in_file = name + ".in",
             out_file = name + ".out";
 
ifstream fin(in_file);
ofstream fout(out_file);

int t;
long long n; 
vector<pii> all;

bool func(pii a, pii b) {
	return (a.s - a.f) < (b.s - b.f);
}

void solveSystem(long long i) {
	long long a = min(i, 2 * n / i), b = max(i, 2 * n / i);
	if ((b - a - 1) % 2 != 0 || (b + a - 1) % 2 != 0)
		return;
	all.push_back(make_pair((b - a - 1) / 2 + 1, (b + a - 1) / 2));
}

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

		all.clear();

		for (long long i = 2; (1LL * i * i) <= 2 * n; i++) 
			if ((2 * n) % i == 0)
				solveSystem(i);

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

		fout << all.size() << '\n';
		for (auto p : all) 
			fout << p.f << ' ' << p.s << '\n';
		 
	}
	return 0;
}