# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1064486 | 2024-08-18T13:16:40 Z | Charizard2021 | 곤돌라 (IOI14_gondola) | C++17 | 0 ms | 0 KB |
#include "gondola.h" #include<bits/stdc++.h> using namespace std; int valid(int n, int inputSeq[]){ set<int> s; bool works = true; int idx = 0; for(int i = 0; i < n; i++){ s.insert(inputSeq[i]); if(inputSeq[i] <= n){ idx = i; works = false; } } if((int)s.size() != n){ return 0; } if(works){ return 1; } int a[n]; int val = inputSeq[idx]; for(int i = idx; i < n; i++){ a[i] = val++; val %= n; if(val == 0) val = n; } for(int i = 0; i < idx; i++){ a[i] = val++; val %= n; if(val == 0) val = n; } bool works2 = true; for(int i = 0; i < n; i++){ if(inputSeq[i] <= n){ if(inputSeq[i] != a[i]){ works2 = false; } } } if(works2){ return 1; } return 0; } //---------------------- int replacement(int n, int gondolaSeq[], int replacementSeq[]){ int maxVal = 0; int minVal = INT_MAX; for(int x = 0; x < n; x++){ maxVal = max(maxVal, gondolaSeq[x]); minVal = min(minVal, gondolaSeq[x]); } if(maxVal <= n){ return 0; } if(minVal > n){ return 0; } int x[maxVal + 1]; for(int a = n + 1; a <= maxVal; a++){ x[a] = 0; } int idx = 0; for(int i = 0; i < n; i++){ if(gondolaSeq[i] <= n){ idx = i; } } int a[n]; int val = gondolaSeq[idx]; for(int i = idx; i < n; i++){ a[i] = val++; val %= n; if(val == 0) val = n; } for(int i = 0; i < idx; i++){ a[i] = val++; val %= n; if(val == 0) val = n; } for(int i = 0; i < n; i++){ if(gondolaSeq[i] > n){ x[gondolaSeq[i]] = a[i]; } } for(int i = maxVal; i >= n + 1; i--){ if(x[i] != 0){ x[i] = x[i + 1]; } } map<int, vector<int> > mp; for(int i = n + 1; i <= maxVal; i++){ mp[x[i]].push_back(i); } int val = 0; int idx = 0; for(auto it : mp){ val += it.second.size(); replacementSeq[idx++] = it.first; for(int c : it.second){ if(c == it.second.back()){ break; } replacementSeq[idx++] = c; } } return val; } //---------------------- int countReplacement(int n, int inputSeq[]){ return -3; }