Cod sursa(job #2666210)

Utilizator dani.markadonDonescu Daniel-Adrian dani.markadon Data 1 noiembrie 2020 10:49:21
Problema Stramosi Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <iostream>
#include <vector>
#include <fstream>
#include <queue>
#include <tuple>

class Ancients
{
private:
	std::queue<std::tuple<int, int>> question;
	std::vector<int> anc, g;

	int n, m;

public:

	Ancients()
	{
		ReadFromFile("stramosi.in");
		BuildList();
		AnswerToAllQuestions("stramosi.out");
	}

	void ReadFromFile(const char* fileName)
	{
		std::ifstream in(fileName);

		in >> n >> m;

		for (int i = 0; i < n; i++)
		{
			int a;
			in >> a;
			anc.push_back(a);
		}
		for (int i = 0; i < m; i++)
		{
			int x, y;
			in >> x >> y;
			question.push(std::make_pair(x, y));
		}
	}

	void BuildList()
	{
		for (int i = 0; i < m; i++)
			g.push_back(anc[i]);
	}

	int AnswerToQuestion(int q, int p)
	{
		if (!p)
			return q;

		q--;
		while (p > 0)
		{
			q = anc[q] - 1;
			if (q == -1)
				break;
			p--;
		}
		if (p)
			q = 0;
		else
			q++;

		return q;
	}

	void AnswerToAllQuestions(const char* fileName)
	{
		std::ofstream out(fileName);

		while (question.size() > 0)
		{
			out << AnswerToQuestion(std::get<0>(question.front()), std::get<1>(question.front())) << std::endl;
			question.pop();
		}
	}
};

int main()
{
	new Ancients();
}