# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
978621 | 2024-05-09T11:37:11 Z | Amaarsaa | 곤돌라 (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 ++) { used[gondola[i]] = 1; if ( gondola[i] <=n) { cnt ++; mn = gondola[i]; ind = i; } l = max(l, gondola[i]); } for (i = 0; i < l; i ++) replacement[i] = 0; if ( cnt == 0) { for (int i = 1; i <= (n + l); i ++) { if (!used[i]) { while(used[ind1] != 0) ind1++; replacement[ind1] = i; ind1 ++; } } return l; } l -= n; 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; } 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; }