Cod sursa(job #1709182)

Utilizator UTCN_rachetaUTCN Pocol Rogoz Oltean UTCN_racheta Data 28 mai 2016 11:11:07
Problema Consecutive Scor 100
Compilator cpp Status done
Runda ONIS 2016 - Runda - 2 - ACM ICPC Romanian Programming Contest Marime 1.97 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

struct StFi
{
    long long x, y;
};

long long summ (long long start, long long finish)
{
    long long SF = ((finish) * (finish + 1)) / 2;
    long long SS = ((start - 1) * (start)) / 2;

    return (SF - SS);


}

vector <StFi> sol;

int main()
{
    ifstream f ("consecutive.in");
    ofstream g ("consecutive.out");

    long long i, T, N, midNb, toLR, stg, dr, Scr, nrSOL = 0;
    StFi DePus;

    f >> T;

    while (T --)
    {
        f >> N;
        for (i = 2; (i * (i + 1)) / 2 <= N; ++ i)
        {
            midNb = N / i;
            toLR = i / 2;
            if (i % 2 == 0)
            {

                stg = midNb - toLR + 1;
                dr = midNb + toLR;
                Scr = summ (stg, dr);
                if (Scr == N)
                {
                    DePus . x = stg;
                    DePus . y = dr;
                    sol . push_back (DePus);
                    ++ nrSOL;
                }

                stg --;
                dr --;
                Scr = summ (stg, dr);
                if (Scr == N)
                {
                    DePus . x = stg;
                    DePus . y = dr;
                    sol . push_back (DePus);
                    ++ nrSOL;
                }
            }
            else
            {
                stg = midNb - toLR;
                dr = midNb + toLR;
                Scr = summ (stg, dr);
                if (Scr == N)
                {
                    DePus . x = stg;
                    DePus . y = dr;
                    sol . push_back (DePus);
                    ++ nrSOL;
                }
            }
        }

        g << nrSOL << "\n";
        for (i = 0; i < sol . size (); ++ i)
        {
            g << sol [i]. x << ' ' << sol [i] . y << "\n";
        }

        sol.clear ();
        nrSOL = 0;
    }


    return 0;
}