Cod sursa(job #1708932)

Utilizator lookingForAChallengeUBB Cociorva Popoveniuc Salajan lookingForAChallenge Data 28 mai 2016 10:16:43
Problema Consecutive Scor 100
Compilator cpp Status done
Runda ONIS 2016 - Runda - 2 - ACM ICPC Romanian Programming Contest Marime 1.09 kb
#include <bits/stdc++.h>

using namespace std;

#define ll long long
#define ld long double
#define pb push_back
#define mp make_pair
#define pii pair<int, int>
#define pll pair<ll, ll>
#define pdd pair<ld, ld>
#define all(x) (x).begin(), (x).end()
#define fi first
#define se second

bool cmp(pll A, pll B) {
    return A.se - A.fi < B.se - B.fi;
}

int main() {
    cin.sync_with_stdio(false);

    freopen("consecutive.in", "r", stdin);
    freopen("consecutive.out", "w", stdout);

    int t;
    cin >> t;

    for (; t; t--) {
        ll n;
        cin >> n;
        vector<pll> sol;
        for (ll i = 1; i * i <= 2 * n; i++) {
            if ((2 * n) % i == 0) {
                ll j = (2 * n) / i;

                ll b = (i + j - 1) / 2;
                ll a = b - i;

                if (b * (b + 1) / 2 - a * (a + 1) / 2 == n)
                    if (a + 1 != b)
                        sol.pb({a + 1, b});
            }
        }

        sort(all(sol), cmp);

        cout << sol.size() << '\n';
        for (auto it : sol)
            cout << it.fi << " " << it.se << '\n';
    }

    return 0;
}