Cod sursa(job #2347552)

Utilizator GeorgeCalinPetruta George-Calin GeorgeCalin Data 18 februarie 2019 21:15:34
Problema Consecutive Scor 0
Compilator cpp-64 Status done
Runda Arhiva ICPC Marime 1.26 kb
#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<=32;i++)
        cs*=2;
    ll c=1;
    while(s<cs)
    {
        s+=c;
        v[c]=s;
        c++;
    }
    v[c]=v[c-1]+c;
    ll 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;
}