Cod sursa(job #1973752)

Utilizator raulmuresanRaul Muresan raulmuresan Data 25 aprilie 2017 20:30:20
Problema Consecutive Scor 100
Compilator cpp Status done
Runda Arhiva ICPC Marime 1.16 kb
#include <bits/stdc++.h>

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<pair<long long, long long> > all;

bool func(pair<long long, long long> a, pair<long long, long long> b) {
    //sortam solutiile dupa lungimea intervalului
    return (a.second - a.first) < (b.second - b.first);
}

void solveSystem(long long i) {
    //pe fiecare divizor al lui 2*N rezolvam sitemul
    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;
    while(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.first << " " << p.second << "\n";

    }
    return 0;
}