Submission #228044

#TimeUsernameProblemLanguageResultExecution timeMemory
228044AaronNaiduAncient Books (IOI17_books)C++14
50 / 100
163 ms18936 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; int pos[1000001]; ll minimum_walk(vector<int> p, int s) { int trueLength = p.size(); for (int i = 0; i < p.size(); i++) { pos[p[i]] = i; } for (int i = p.size() - 1; i >= 0; i--) { if (p[i] == i) { trueLength--; } else { break; } } ll toRet = 0; int startPoint = 0; int maxSoFar = -1; int groups = 0; for (int i = 0; i < trueLength; i++) { toRet += abs(i - p[i]); maxSoFar = max(maxSoFar, p[i]); if (maxSoFar == i) { // cout << "Breaking at " << i << "\n"; groups++; if (i < trueLength - 1) { // cout << "Adding " << abs(pos[startPoint] - (i+1)) << " for travelling\n"; //toRet += abs(pos[startPoint] - (i+1)); startPoint = i+1; } else { //cout << "Adjustment adding " << abs(startPoint - p[startPoint]) << " for " << startPoint << "\n"; //toRet += abs(pos[startPoint] - p[pos[startPoint]]); } } } //cout << "Adding " << startPoint << " at end\n"; //toRet += startPoint; if (groups == 0) { groups++; } toRet += 2 * (groups - 1); return toRet; }

Compilation message (stderr)

books.cpp: In function 'll minimum_walk(std::vector<int>, int)':
books.cpp:9:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 0; i < p.size(); i++)
                     ~~^~~~~~~~~~
books.cpp:26:9: warning: variable 'startPoint' set but not used [-Wunused-but-set-variable]
     int startPoint = 0;
         ^~~~~~~~~~
#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...