Cod sursa(job #1709044)

Utilizator TeamFIIEUAIC ASD TeamFIIE Data 28 mai 2016 10:41:23
Problema Consecutive Scor 0
Compilator cpp Status done
Runda ONIS 2016 - Runda - 2 - ACM ICPC Romanian Programming Contest Marime 1.59 kb
#include <iostream>
#include <cmath>
using namespace std;

/*
int n;
int a[1000024];
int countt = 0;

int wtf(int i)
{
  countt++;
  if (countt >= 19997) {
    countt -= 19997;
  }
  if (i == n - 1) {
    return a[i];
  }
  if (a[i] < wtf(i + 1)) {
    return a[i];
  } else {
    return wtf(i + 1);
  }
}

int main()
{
cin>>n;
  for (int i = 0; i < n; ++i) {
    cin>>a[i];
  }
  wtf(0);
 cout<<countt<<'\n';
}
*/

unsigned long long N,T;
unsigned long long x[100000],y[100000];
unsigned long long cautbin(unsigned long long lung)
{
    unsigned long long m,p,u,calc1,calc2;
    p=1;
    u=N-1;
    while(p<=u)
    {
        m=(p+u)/2;
        calc2=m-lung;
        calc1=(m*(m+1)/2)-(calc2*(calc2+1)/2);
        if(calc1==N) return m;
        if(calc1>N)
        {
            u=m-1;
        }
        else p=m+1;
    }
    return 0;
}
int main()
{
    cin>>T;
    unsigned long long i,lungime,rez,countt,calc,j;
    for(i=1;i<=T;i++)
    {
        cin>>N;
        countt=0;
        if(N%2==0)
        {
            lungime=3;
        }
        else lungime=2;
        calc=(lungime)*(lungime+1)/2;
        while(calc<=N)
        {
            rez=cautbin(lungime);
            if(rez!=0)
            {
                countt++;
                y[countt]=rez;
                x[countt]=rez-lungime+1;
            }
            lungime++;
            calc=(lungime)*(lungime+1)/2;
        }
        cout<<countt<<'\n';
        for(j=1;j<=countt;j++)
        {
            cout<<x[j]<<" "<<y[j]<<'\n';
        }
    }
    return 0;
}