Cod sursa(job #1709280)

Utilizator UPT-DaUPT Troncota Teudan Vijdea UPT-Da Data 28 mai 2016 11:37:24
Problema Consecutive Scor 100
Compilator cpp Status done
Runda ONIS 2016 - Runda - 2 - ACM ICPC Romanian Programming Contest Marime 1.25 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>
#include <utility>

using namespace std;

int main()
{
    ifstream in("consecutive.in");
    ofstream out("consecutive.out");
    std::vector< std::pair<int, int> > sums;

    int T;
    in >> T;
    for (int t = 0; t < T; ++t) {
        int N;
        in >> N;
        sums.clear();
        int d = 2, lim = int(sqrt(1 + 8LL*N)) / 2;
        while (d <= lim) {
            int mid = N / d;
            int rm = (N - mid * d);
            int a, b;

            if ((d & 1) == 1 && rm == 0) {
                a = mid - d/2;
                b = mid + d/2;
            }
            else if (((d & 1) == 0 && rm == (d >> 1))) {
                a = mid - d/2 + 1;
                b = mid + d/2;
            }
            else {
                d += 1;
                continue;
            }

            if (a > 0) {
                sums.push_back({a, b});
            }
            else {
                break;
            }

            d += 1;
        }

        out << sums.size() << '\n';
        for (std::pair<int, int>& p : sums) {
            out << p.first << " " << p.second << "\n";
        }
    }

    out.flush();
    return 0;
}