Cod sursa(job #2455931)

Utilizator alex_HarryBabalau Alexandru alex_Harry Data 13 septembrie 2019 09:39:43
Problema Consecutive Scor 100
Compilator cpp-64 Status done
Runda Arhiva ICPC Marime 1.42 kb
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream f("consecutive.in");
ofstream g("consecutive.out");
long long N;
vector <pair <long long, long long> > Sol;
void Solve(){
    for(int i = 1; 1LL * i * i <= N; i++){
        if(N % i == 0){
            long long diff = i;
            long long sum = N / i - 1;
            if((sum + diff) % 2 == 0){
                long long x = (sum + diff) / 2;
                long long y = x - diff;
                if(x >= 0 && y >= 0){
                    Sol.push_back(make_pair(y + 1, x));
                }
            }
            diff = N / i;sum = i - 1;
            if((sum + diff) % 2 == 0){
                long long x = (sum + diff) / 2;
                long long y = x - diff;
                if(x >= 0 && y >= 0){
                    Sol.push_back(make_pair(y + 1, x));
                }
            }
        }
    }
}

void Print(pair <long long, long long> sol){
    if(sol.first == sol.second)
        return;
    g << sol.first << ' ' << sol.second << '\n';
}
int main()
{
    int T;
    f >> T;
    while(T--){
        f >> N;
        N *= 2;
        Solve();
        g << Sol.size() - 1 << '\n';
        sort(Sol.begin(), Sol.end());
        reverse(Sol.begin(), Sol.end());
        N /= 2;
        for(int i = 0; i < Sol.size(); i++)
            Print(Sol[i]);
        Sol.clear();
    }

    return 0;
}