Submission #566393

#TimeUsernameProblemLanguageResultExecution timeMemory
566393SifferAncient Books (IOI17_books)C++14
0 / 100
1 ms300 KiB
#include "books.h" #include<bits/stdc++.h> using namespace std; #define ll long long vector<int> v,c,vc; int search(int n, vector<int> &p) { if(v[n] || p[n] == n) return 0; v[n] = 1; vc[c[n]] = 1; int r = 0; if(n > 0 && c[n-1] != c[n] && !vc[c[n-1]]) { int k = search(n-1, p); if(k) r += k + 2; } if(n+1 < p.size() && c[n+1] != c[n] && !vc[c[n+1]]) { int k = search(n+1, p); if(k) r += k + 2; } r += abs(n-p[n]); r += search(p[n], p); return r; } ll minimum_walk(vector<int> p, int s) { int n = p.size(); c.resize(n,-1); v.resize(n,0); vc.resize(n,0); for(int i = 0; i < n; i++) { if(c[i] == -1) { c[i] = i; int k = p[i]; while(k != i) { c[k] = i; k = p[k]; } } } int r = search(s, p); for(int i = 1; i < n; i++) { if(s >= i) { int k = search(s-i, p); if(k) r += 2*i + k; } if(s+i < n) { int k = search(s+i, p); if(k) r += 2*i + k; } } return r; }

Compilation message (stderr)

books.cpp: In function 'int search(int, std::vector<int>&)':
books.cpp:18:9: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   18 |  if(n+1 < p.size() && c[n+1] != c[n] && !vc[c[n+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...