Cod sursa(job #1708999)

Utilizator UPB_CodeJunkiesUPB NAIDEN NICOLICIOIU COTET UPB_CodeJunkies Data 28 mai 2016 10:30:35
Problema Consecutive Scor 100
Compilator cpp Status done
Runda ONIS 2016 - Runda - 2 - ACM ICPC Romanian Programming Contest Marime 1.09 kb
#include<stdio.h>
#include<algorithm>
#include<cmath>
#include<vector>
#define pb push_back
#define mp make_pair
using namespace std;

int T;
long long n;
vector< pair<int,int> > sol;

bool cmp(const pair<int,int> &A, const pair<int,int> &B){
    return (A.second-A.first)<(B.second-B.first);
}

void solve()
{
    sol.clear();

    n*=2;
    int A,B,x,y;

    int lim=(int)(sqrt(n));

    for(int i=1;i<=lim;i++)
     if( n%i==0 )
     {
         A=i;
         B=n/i;

         if( (A+B-1)%2!=0 ) continue;

         x=(A+B-1)/2;
         y=x-A;
         if( y<0 )continue;

         if( y+1==x ) continue;
         sol.pb(mp(y+1,x));
     }

     sort(sol.begin(),sol.end(),cmp);
}

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

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

    scanf("%d",&T);
    for(;T;T--)
    {
        scanf("%lld",&n);
        solve();
        print();
    }

    return 0;
}