Cod sursă (job #786447)

Utilizator avatar Rradu_v2 Catana Radu Rradu_v2 IP ascuns
Problemă Déjà vu Compilator cpp-32 | 2,10 kb
Rundă Arhiva de probleme Status evaluat
Dată 15 sept. 2024 16:12:48 Scor 0
#include <bits/stdc++.h>

using namespace std;

char f[5002];
int cur[5000];
int gen[5000];

int same(int n)
{
    int i;
    i = 0;
    while(i<n && cur[i]==gen[i])
        i++;
    if(i==n)
        return 1;
    else
        return 0;
}

int add(int n, int i)
{
    if(i>=0)
    {
        int j;
        j = gen[i]+1;
        while(j<=n && f[j]>1)
            j++;
        if(j<=n)
        {
            if(i+1==n)
                f[gen[i]]--;
            f[j]++;
            gen[i] = j;
        }
        else
        //if(f[gen[i]]>2 || gen[i]>n)
        {
            j = 1;
            f[gen[i-1]]--;
            while(j<=n && f[j]>1)
                j++;
            if(j<=n)
            {
                if(i+1==n)
                    f[gen[i]]--;
                f[j]++;
                gen[i] = j;
                add(n, i-1);
            }
        }
    }
}

int main()
{
    FILE *fin, *fout;
    int n, q, i, j, k, d;
    fin = fopen("dejavu.in", "r");
    fout = fopen("dejavu.out", "w");

    fscanf(fin, "%d%d", &n, &q);

    for(j = 0; j<q; j++)
    {
        for(i=0; i<n; i++)
        {
            gen[i] = i/2+1;
            if((i+1)%2==0)
                f[i/2+1] = 2;
            fscanf(fin, "%d", &cur[i]);
        }
        if(n%2==1)
            f[(n-1)/2+1] = 1;

        /*for(i=0; i<n; i++)
            fprintf(fout, "%d", cur[i]);
        fprintf(fout, "\n");
        for(i=0; i<n; i++)
            fprintf(fout, "%d", gen[i]);
        fprintf(fout, "\n");
        for(i=0; i<=5; i++)
            fprintf(fout, "%d", f[i]);
        fprintf(fout, "\n");*/

        d=0;
        //for(k=0; k<12; k++)
        while(same(n)==0)
        {
            add(n, n-1);
            /*for(i=0; i<=5; i++)
                fprintf(fout, "%d", f[i]);
            fprintf(fout, "\n");
            for(i=0; i<n; i++)
                fprintf(fout, "%d", gen[i]);
            fprintf(fout, "\n");*/
            d = (d+1)%1000000007;
        }
        fprintf(fout, "%d\n", d);
    }

    fclose(fin);
    fclose(fout);
    return 0;
}