Submission #835138

#TimeUsernameProblemLanguageResultExecution timeMemory
835138oscar1fAncient Books (IOI17_books)C++17
0 / 100
1 ms340 KiB
#include<bits/stdc++.h>
#include "books.h"

using namespace std;
using ll=long long;

const ll MAX_TAILLE=1000*1000+5;
ll nbVal,rep,posDeb,nbCompo,valFin;
vector<ll> obj,listeCompo;
ll idCompo[MAX_TAILLE],finCompo[MAX_TAILLE];

void DFS(ll pos) {
	if (idCompo[pos]==0) {
		idCompo[pos]=nbCompo;
		finCompo[pos]=valFin;
		DFS(obj[pos]);
	}
}

ll minimum_walk(vector<int> p, int s) {
	posDeb=s;
	nbVal=p.size();
	for (auto i:p) {
		obj.push_back(i);
	}
	for (ll i=nbVal-1;i>=0;i--) {
		if (idCompo[i]==0) {
			nbCompo++;
			valFin=i;
			DFS(i);
		}
		rep+=abs(i-obj[i]);
	}
	int pos=0;
	while (pos!=nbVal-1) {
		if (finCompo[pos]==pos) {
			pos++;
			rep+=2;
		}
		else {
			pos=finCompo[pos];
		}
	}
	return rep;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...