Cod sursa(job #1055577)

Utilizator iconiKMircea Chirea iconiK Data 14 decembrie 2013 11:38:13
Problema Progresie Scor 0
Compilator cpp Status done
Runda ONIS 2014, Runda 1 Marime 1.43 kb
#include <fstream>
#include <vector>

bool check(int x)
{
    int n = 0;
    std::vector<int> v;

    for (int i = 1; n <= x; i++)
    {
        for (int j = 1; j <= i; j++)
        {
            v.push_back(++n);

            if (n == x)
                return true;
        }

        for (int j = 1; j <= i; j++)
            ++n;
    }

    return false;
}

bool check_progression(int v, int n, int r)
{
    std::vector<int> p;
    p.push_back(v);

    for (int i = 0; i < n - 1; i++)
        p.push_back(p[i] + r);

    for (size_t i = 0; i < p.size(); i++)
    {
        if (!check(p[i]))
            return false;
    }

    return true;
}

int main()
{
    std::ifstream in("progresie.in");
    std::ofstream out("progresie.out");

    int T;
    in >> T;

    for (int test = 1; test <= T; test++)
    {
        int N, R;
        in >> N >> R;

        int n = 0;
        bool done = false;
        std::vector<int> v;

        for (int i = 1; !done; i++)
        {
            for (int j = 1; j <= i; j++)
                v.push_back(++n);

            for (int j = 1; j <= i; j++)
                ++n;

            for (size_t j = 0; j < v.size() && !done; j++)
            {
                if (check_progression(v[j], N, R))
                {
                    out << v[j] << "\n";

                    done = true;
                }
            }
        }
    }
}