Pagini recente » Cod sursa (job #1559974) | Cod sursa (job #176851) | Cod sursa (job #660048) | Cod sursa (job #1666337) | Cod sursa (job #2257645)
#include <fstream>
#define ll long long
using namespace std;
ifstream fin("consecutive.in");
ofstream fout("consecutive.out");
ll v[67000];
ll sol[67000];
ll sol2[67000];
int caut_bin(ll nr,int dre)
{
int dr=dre;
int st=0;
while(dr>=st)
{
int mij=(dr+st)/2;
if(v[mij]==nr)
return mij;
else
if(v[mij]>nr)
dr=mij-1;
else
st=mij+1;
}
return -1;
}
int main()
{
ll s=0;
ll cs=1;
for(int i=1;i<=31;i++)
cs*=2;
ll c=1;
while(s<cs)
{
s+=c;
v[c]=s;
c++;
}
c--;
int teste,n;
fin>>teste;
for(int pas=1;pas<=teste;pas++)
{
fin>>n;
int nr_sol=0;
int d=1;
while(v[d]<n)
d++;
for(int i=c;i>=d;i--)
{
ll nr=v[i]-n;
int resolve=caut_bin(nr,i);
if(resolve!=-1&&resolve+1<i)
{
nr_sol++;
sol2[nr_sol]=resolve+1;
sol[nr_sol]=i;
}
}
fout<<nr_sol<<"\n";
for(int i=1;i<=nr_sol;i++)
fout<<sol2[i]<<" "<<sol[i]<<"\n";
}
return 0;
}