Cod sursa(job #1709170)

Utilizator UPB_Darius_Rares_SilviuPeace my pants UPB_Darius_Rares_Silviu Data 28 mai 2016 11:08:59
Problema Consecutive Scor 0
Compilator cpp Status done
Runda ONIS 2016 - Runda - 2 - ACM ICPC Romanian Programming Contest Marime 1.11 kb
#include <stdio.h>
#include <unordered_map>
#include <vector>
#define LMax 65000

using namespace std;
vector<pair<int, int> > sol;

int Tes;
int N;

long long sum(int a, int b) {
    -- b;
    long long sa = 1LL * a * (a + 1) / 2;
    long long sb = 1LL * b * (b + 1) / 2;
    return sa - sb;
}

int main() {

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

    scanf("%d", &Tes);


    while ( Tes -- ) {

        sol.clear();
        scanf("%d", &N);
        long long NN = 2LL * N;

        if ( (N & ( N - 1 )) == 0 ) {
            printf("0\n");
            continue;
        }

        for ( int n = 2; 1LL * n * n <= NN; ++ n ) {
            if ( NN % n == 0 ) {
                int a1 = (2LL * N / n - n + 1) / 2;
                int a2 = a1 + n - 1;

                if ( a1 > 0 && a2 > 0 )
                    sol.push_back({a1, a2});
            }

        }

        printf("%d\n", sol.size());
        for ( int i = 0; i < sol.size(); ++ i )
            printf("%d %d\n", sol[i].first, sol[i].second);

    }


    return 0;
}