Cod sursa(job #1709031)

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

using namespace std;

unordered_map<long long, bool> is_sum;
unordered_map<long long, int> inv;
vector<pair<int, int> > sol;

int Tes;
int N;

int main() {

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

    scanf("%d", &Tes);

    long long sum = 0;
    for ( int i = 0; i <= LMax; ++ i ) {
        sum += i;
        is_sum[sum] = true;
        inv[sum] = i;
    }


    while ( Tes -- ) {

        sol.clear();
        scanf("%d", &N);

        long long sum = 0;

        for ( int i = 1; i < N && i <= LMax; ++ i ) {
            sum += i;
            long long rem = sum - N;

            if ( is_sum.find(rem) != is_sum.end() ) {
                sol.push_back({inv[rem], i});
            }

        }

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

    }


    return 0;
}