Cod sursa(job #3198773)

Utilizator vladimir.gavris.1Gavris Mihai Vladimir vladimir.gavris.1 Data 30 ianuarie 2024 15:09:13
Problema Stramosi Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <stdio.h>

#define MAXN 250000
#define LOGN 19

int ancestors[ MAXN ][ LOGN ];

int n, m;

struct question
{
    int member, grade;
};

int main()
{
    FILE *fin, *fout;
    fin = fopen( "stramosi.in", "r" );
    fscanf( fin, "%d%d", &n, &m );

    for( int i = 1; i <= n; i++ )
    {
        fscanf( fin, "%d", &ancestors[ 0 ][ i ] );
    }

    for( int j = 1; j < LOGN; j++ )
    {
        for( int i = 1; i <= n; i++ )
        {
            ancestors[ j ][ i ] = ancestors[ j - 1 ][ ancestors[ j - 1 ][ i ] ];
        }
    }

    fout = fopen( "stramosi.out", "w" );

    question q;
    for( int i = 0; i < m; i++ )
    {
        fscanf( fin, "%d%d", &q.member, &q.grade );

        int power = 0;
        while( q.grade > 0 )
        {
            if( q.grade % 2 == 1 )
            {
                q.member = ancestors[ power ][ q.member ];
            }

            power++;
            q.grade /= 2;
        }

        fprintf( fout, "%d\n", q.member );
    }

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