Cod sursa(job #1709512)

Utilizator UBB_RETIRED_BUT_DANGEROUSUBBTEAM UBB_RETIRED_BUT_DANGEROUS Data 28 mai 2016 12:41:10
Problema Consecutive Scor 0
Compilator cpp Status done
Runda ONIS 2016 - Runda - 2 - ACM ICPC Romanian Programming Contest Marime 1.08 kb
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

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

bool isPowerOfTwo(long long n)
{
	if ((n & (n - 1)) == 0)
		return 1;
	return 0;
}

bool cmp(pair<long long, long long> x, pair<long long, long long> y)
{
	if ((y.second - y.first) >= (x.second - x.first))
		return true;
	return false;
}

int main()
{
	int T; in >> T;
	for (int t = 0; t < T; t++)
	{
		int N; in >> N;
		vector<pair<int, int>> sol;

		if (isPowerOfTwo(N) || N == 1)
		{
			out << 0 << '\n';
			continue;
		}

		sol.push_back(make_pair(N / 2, N / 2 + 1));

		for (int q = 3; q < N; q += 2)
		{
			if (N % q != 0)
			{
				continue;
			}

			int r = N / q;
			int left = r - q / 2;
			int right = r + q / 2;
			if (left < 1)
			{
				continue;
			}

			sol.push_back(make_pair(left, right));
		}

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

		out << sol.size() << '\n';
		for (int i = 0; i < sol.size(); i++)
		{
			out << sol[i].first << ' ' << sol[i].second << '\n';
		}
	}

	return 0;
}