Cod sursa(job #1709409)

Utilizator UAIC_RIP_Han_SoloUAIC BotoIasiByte UAIC_RIP_Han_Solo Data 28 mai 2016 12:07:51
Problema Consecutive Scor 100
Compilator cpp Status done
Runda ONIS 2016 - Runda - 2 - ACM ICPC Romanian Programming Contest Marime 1.41 kb
#include <bits/stdc++.h>
#include <algorithm>

#define pb push_back
#define mp make_pair
#define mt make_tuple
#define ll long long
#define pii pair<int,int>
#define tii tuple <int,int,int>
#define N 1000005
#define mod 2000003
#define X first
#define Y second
#define eps 0.0000000001
#define all(x) x.begin(),x.end()
#define tot(x) x+1,x+n+1
using namespace std;

ll n,i,x,t,sol,y,xx;

int main()
{
    freopen("consecutive.in","r",stdin);
    freopen("consecutive.out","w",stdout);
    scanf("%lld",&t);
    for(; t; t--)
    {
        scanf("%lld",&n);
        if(n==1)
        {
            cout<<0<<'\n';
            continue;
        }
        sol=0;
        for(i=2, x=0; x<=n; i++,x+=i)
        {
            if(n%i==0 && i%2==1)
            {
                xx=n/i;
                y=n/xx;
                if((n/i)-(y/2)>0)sol++;

            }
            else if(n%(i/2)==0 && i%2==0&&(n/(i/2))%2&&(n/i-(i/2-1))>0)sol++;
        }
        cout<<sol<<'\n';
        x=0;
        for(i=2; x<=n; i++,x+=i)
        {
            if(n%i==0 && i%2==1)
            {
                xx=n/i;
                y=n/xx;

                if(xx-(y/2)>0)
                    cout<<xx-(y/2)<<' '<<xx+(y/2)<<'\n';

            }
            else if(n%(i/2)==0 && i%2==0&&(n/(i/2))%2&&(n/i-(i/2-1))>0)cout<<n/i-(i/2-1)<<' '<<n/i+(i/2)<<'\n';
        }
    }

    return 0;
}