Submission #1080272

#TimeUsernameProblemLanguageResultExecution timeMemory
1080272TB_Ancient Books (IOI17_books)C++17
50 / 100
148 ms42968 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define fo(i, n) for(ll i = 0; i<(n); i++) #define F first #define S second #define pb push_back #define deb(x) cout << #x << " = " << (x) << endl #define deb2(x, y) cout << #x << " = " << (x) << ", " << #y << " = " << (y) << endl typedef vector<ll> vl; typedef vector<vl> vvl; vl color, nextB, highest; ll ans = 0, c = 0; void dfs(int u){ if(color[u]!=-1) return; highest[c]=max(highest[c], (ll)u); color[u] = c; dfs(nextB[u]); ans+=abs(nextB[u]-u); } long long minimum_walk(std::vector<int> p, int s){ ll n = p.size(); fo(i, n)nextB.pb(p[i]); color.assign(n, -1); ll biggest = 0; fo(i, n){ if(color[i]!=-1) continue; if((nextB[i] != i))biggest = i+1; highest.pb(-1); dfs(i); c++; } ll current = 0; // deb(ans); fo(i, biggest){ if(current<i)ans+=2; // deb2(current, i); current = max(current, highest[color[i]]); } return ans; }
#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...