Submission #605661

#TimeUsernameProblemLanguageResultExecution timeMemory
605661dnassAncient Books (IOI17_books)C++14
0 / 100
1 ms340 KiB
#include "books.h" #include <bits/stdc++.h> using namespace std; typedef long long int lld; lld n; lld minimum_walk(vector<int> p, int s){ n = (lld) p.size(); lld ans = 0; for(lld i=0;i<n;i++) ans+=abs(p[i]-i); vector<bool> vis(n, false); vector<vector<lld>> cycles; vector<pair<lld,lld>> evs; for(lld i=0;i<n;i++){ if(!vis[i]){ vector<lld> tmp; lld x = i; while(true){ if(vis[x]) break; tmp.push_back(x); vis[x] = true; x = p[x]; } cycles.push_back(tmp); sort(tmp.begin(), tmp.end()); evs.push_back({tmp[0], 0}); evs.push_back({*tmp.rbegin(), 1}); } } sort(evs.begin(), evs.end()); lld op = 0; vector<lld> newcycle; for(lld i=0;i<(lld)evs.size();i++){ if(evs[i].second==0){ if(op==0) newcycle.push_back(evs[i].first); op++; }else{ op--; } } return ans+2*((lld)newcycle.size()-1); }
#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...