Cod sursa(job #1776793)

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

using namespace std;

vector<vector<int>> ReadElments(int &numberOfElements, int &numberOfQueries, ifstream &in)
{
    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, ifstream &in)
{
    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;

    ifstream in("stramosi.in");

    auto dpMatrix = ReadElments(numberOfElements, numberOfQueries, in);

    CompleteDpMatrix(dpMatrix, numberOfElements);

    ProcessingQueries(dpMatrix, numberOfElements, numberOfQueries, in);

    in.close();
    return 0;
}