Advertisement
erek1e

IOI '20 - Plants (5pts)

Mar 5th, 2023
604
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.71 KB | None | 0 0
  1. #include "plants.h"
  2.  
  3. using namespace std;
  4.  
  5. int n;
  6. vector<int> greater, less;
  7.  
  8. void init(int k, vector<int> r) {
  9.     n = r.size();
  10.     greater.resize(n);
  11.     less.resize(n);
  12.    
  13.     // find cross-over
  14.     int start = 0;
  15.     while (r[(start-1+n)%n] == r[start]) ++start;
  16.  
  17.     int cur = (start-1+n)%n;
  18.     do {
  19.         int nxt = (cur+1)%n;
  20.         if (r[cur]) less[cur] = less[nxt]+1;
  21.         else greater[cur] = greater[nxt]+1;
  22.         cur = (cur-1+n)%n;
  23.     } while ((cur+1)%n != start);
  24.     return;
  25. }
  26.  
  27. int compare_plants(int x, int y) {
  28.     int sub = (x < y ? 0 : n);
  29.     if (x+greater[x]-sub >= y) return 1;
  30.     if (x+less[x]-sub >= y) return -1;
  31.     sub = n-sub;
  32.     if (y+greater[y]-sub >= x) return -1;
  33.     if (y+less[y]-sub >= x) return 1;
  34.     return 0;
  35. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement