# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
978614 | 2024-05-09T11:29:25 Z | Amaarsaa | Gondola (IOI14_gondola) | C++14 | 0 ms | 0 KB |
#include<bits/stdc++.h> //#include "gondola.h" using namespace std; int Can(int n, int b[]) { sort ( b , b + n); for (int i = 1; i < n; i ++) if ( b[i]== b[i - 1]) return 0; return 1; } int valid(int n, int a[]) { int cnt = 0, mn = n + 1, ind = 0; for (int i = 0; i < n; i ++) { if ( a[i] <=n) { cnt ++; mn = a[i]; ind = i; } } if ( cnt == 0) { if (!Can(n, a)) return 0; return 1; } int last = a[ind]; for (int j = 0; j < n; j ++) { if (a[ind] <= n && a[ind] != last) { return 0; } last ++; if ( last == n + 1) last = 1; ind = (ind + 1) % n; } if (!Can(n, a)) return 0; return 1; } //---------------------- int replacement(int n, int gondola[], int replacement[]) { int used[250005] = {0}; int cnt = 0, mn = n + 1, ind = 0, ind1= 0, l; l = 0; for (int i = 0; i < n; i ++) { if ( gondola[i] <=n) { cnt ++; mn = gondola[i]; ind = i; } l = max(l, gondola[i]); } l -= n; if ( cnt == 0) { if (!Can(n, gondola)) return 0; return 1; } vector < pair <int,int > > v; int last = gondola[ind]; for (int j = 0; j < n; j ++) { if (gondola[ind] != last) { replacement[gondola[ind] - n - 1] = last; used[last] = 1; } used[gondola[j]] = 1; last ++; if ( last == n + 1) last = 1; ind = (ind + 1) % n; } for (int i = 1; i <= (n + l); i ++) { if (!used[i]) { while(used[ind1] != 0) ind1++; replacement[ind1] = i; ind1 ++; } } return l; }