Cod sursa(job #1776799)

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

using namespace std;

void ReadElments(vector<vector<int>> &dpMatrix, int &numberOfElements,
                 int &numberOfQueries, ifstream &in)
{
    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); ++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");
    in>> numberOfElements>> numberOfQueries;
    vector<vector<int>> dpMatrix( log2(numberOfElements) + 1 , vector<int>(numberOfElements + 1, 0));

    ReadElments(dpMatrix, numberOfElements, numberOfQueries, in);

    CompleteDpMatrix(dpMatrix, numberOfElements);

    ProcessingQueries(dpMatrix, numberOfElements, numberOfQueries, in);

    in.close();
    return 0;
}