Cod sursa(job #3303925)

Utilizator andrei_C1Andrei Chertes andrei_C1 Data 19 iulie 2025 10:51:18
Problema Consecutive Scor 100
Compilator cpp-64 Status done
Runda Arhiva ICPC Marime 1.27 kb
#include <bits/stdc++.h>

using namespace std;

bool verif(long long m, long long n)
{
    if(m==1)
    {
        return false;
    }
    long long a = n/m-(m-1);
    if(a%2==1)
    {
        return false;
    }
    a/=2;
    if(a<=0)
    {
        return false;
    }
    return true;
}

int ras[65536];

int main()
{
    FILE *fin, *fout;
    fin=fopen ("consecutive.in", "r");
    fout=fopen ("consecutive.out", "w");
    long long t, n, d, cnt, k, m;
    fscanf (fin, "%lld", &t);
    for (long long i=1; i<=t; i++)
    {
        fscanf (fin, "%lld", &n);
        n=2*n;
        d=1;
        k=0;
        while(d*d<=n)
        {
            if(n%d==0)
            {
                if(verif(d, n))
                {
                    long long a=(n/d-(d-1))/2;
                    ras[++k]=a;
                    ras[++k]=a+d-1;
                }
                if(verif(n/d, n))
                {
                    long long a=(d-(n/d-1))/2;
                    ras[++k]=a;
                    ras[++k]=a+n/d-1;
                }
            }
            d++;
        }
        fprintf(fout, "%lld\n", k/2);
        for(long long j=1; j<=k; j+=2)
        {
            fprintf(fout, "%lld %lld\n", ras[j], ras[j+1]);
        }
    }
    fclose (fin);
    fclose (fout);
    return 0;
}