Cod sursa(job #1776824)

Utilizator enacheionutEnache Ionut enacheionut Data 11 octombrie 2016 20:34:55
Problema Stramosi Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.53 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <math.h>

using namespace std;

ifstream in("stramosi.in");

void ReadElments(vector<vector<int>> &dpMatrix, int numberOfElements)
{
    for( int i = 1; i <= numberOfElements; ++i )
    {
        in>> dpMatrix[0][i];
    }
}

void CompleteDpMatrix(vector<vector<int>> &dpMatrix, int numberOfElements)
{
    for( int i = 1; i <= log2(numberOfElements) / 2; ++i )
    {
        for( int j = 1; j <= numberOfElements; ++j )
        {
            dpMatrix[i][j] = dpMatrix[i - 1][dpMatrix[i - 1][j]];
        }
    }
}

void ProcessingQueries(vector<vector<int>> &dpMatrix, int numberOfElements, int numberOfQueries)
{
    int element;
    int levelAncestor;

    ofstream out("stramosi.out");
    while( numberOfQueries-- )
    {
        in>> element>> levelAncestor;
        for( int row = 0; levelAncestor; ++row, levelAncestor >>= 1 )
        {
            if( levelAncestor % 2 )
            {
                element = dpMatrix[row][element];
            }
        }

        out<< element<< endl;
    }
    out.close();
}

int main()
{
    int numberOfElements;
    int numberOfQueries;

    in>> numberOfElements>> numberOfQueries;
    vector<vector<int>> dpMatrix( log2(numberOfElements) + 1 , vector<int>(numberOfElements + 1));

    ReadElments(dpMatrix, numberOfElements);

    CompleteDpMatrix(dpMatrix, numberOfElements);

    ProcessingQueries(dpMatrix, numberOfElements, numberOfQueries);

    in.close();
    return 0;
}