Cod sursa(job #1776861)

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

using namespace std;

ifstream in("stramosi.in");

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

void CompleteDpMatrix(vector<vector<int>> &dpMatrix, int numberOfElements)
{
    for( int i = 1; i <= log2(numberOfElements); ++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 & 1 )
            {
                element = dpMatrix[row][element];
            }
        }
        out<< element<< "\n";
    }
    out.close();
}

int main()
{
    int numberOfElements;
    int numberOfQueries;

    auto dpMatrix = ReadElments(numberOfElements, numberOfQueries);

    CompleteDpMatrix(dpMatrix, numberOfElements);

    ProcessingQueries(dpMatrix, numberOfElements, numberOfQueries);

    in.close();
    return 0;
}