# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
428686 | markthitrin | 곤돌라 (IOI14_gondola) | C++14 | 66 ms | 4548 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "gondola.h"
#include <map>
#include <queue>
#include <algorithm>
#include <iostream>
class name {
public:
int value;
int base;
bool operator<(const name& b) const{
return value > b.value;
}
void operator=(const name& b){
value = b.value;
base = b.base;
}
}put_in;
long long mod = 1000000009;
int valid(int n, int inputSeq[])
{
std::map<int,bool> g;
int max = 0;
int find_min = 2000000000;
int min_pos = 0;
for(int q = 0 ;q<n;q++){
if(g[inputSeq[q]])
return 0;
g[inputSeq[q]] = true;
if(find_min > inputSeq[q]){
find_min = inputSeq[q];
min_pos = q;
}
}
if(find_min > n)
return 1;
int last_pos = min_pos - find_min;
for(int q = min_pos;q < min_pos + n;q++){
if(max < inputSeq[q % n] && inputSeq[q % n] <= n){
if(inputSeq[q % n] - max != q - last_pos)
return 0;
max = inputSeq[q % n];
inputSeq[q % n] = 2000000000;
last_pos = q;
}
}
for(int q = 0 ;q<n;q++){
if(inputSeq[q] <= n)
return 0;
}
return 1;
}
//----------------------
int replacement(int n, int gondolaSeq[], int replacementSeq[])
{
std::priority_queue<name> g;
int max = 0;
for(int q = 0 ;q<n;q++){
max = std::max(max,gondolaSeq[q]);
}
int find_min = 2000000000;
int min_pos;
for(int q = 0 ;q<n;q++){
if(find_min > gondolaSeq[q]){
find_min = gondolaSeq[q];
min_pos = q;
}
}
if(find_min > n)
min_pos = 0;
else {
min_pos -= find_min - 1;
if(min_pos < 0) min_pos += n;
}
for(int q = min_pos;q<min_pos + n;q++){
put_in.value = gondolaSeq[q % n];
put_in.base = q + 1 - min_pos;
g.push(put_in);
}
int cnt = 0;
int last_value = n;
while(!g.empty()){
put_in = g.top();
g.pop();
if(put_in.value <= n)
continue;
replacementSeq[cnt++] = put_in.base;
for(int q = last_value + 1;q<put_in.value;q++){
replacementSeq[cnt++] = q;
}
last_value = put_in.value;
}
return cnt;
}
//----------------------
bool valid_g(std::vector<int> inputSeq){
int n = inputSeq.size();
std::map<int,bool> g;
int max = 0;
int find_min = 2000000000;
int min_pos = 0;
for(int q = 0 ;q<n;q++){
if(g[inputSeq[q]])
return false;
g[inputSeq[q]] = true;
if(find_min > inputSeq[q]){
find_min = inputSeq[q];
min_pos = q;
}
}
if(find_min > n)
return false;
int last_pos = min_pos - find_min;
for(int q = min_pos;q < min_pos + n;q++){
if(max < inputSeq[q % n] && inputSeq[q % n] <= n){
if(inputSeq[q % n] - max != q - last_pos)
return false;
max = inputSeq[q % n];
inputSeq[q % n] = 2000000000;
last_pos = q;
}
}
for(int q = 0 ;q<n;q++){
if(inputSeq[q] <= n)
return false;
}
return true;
}
long long power(long long a,int number){
if(number == 0)
return 1;
if(number == 1)
return a;
long long ans = 1;
if(number% 2)
ans *= a;
ans %= mod;
ans *= power(a,number/2);
ans%= mod;
ans*= power(a,number/2);
ans%=mod;
return ans;
}
int countReplacement(int n, int inputSeq[])
{
std::vector<int> copy;
for(int q = 0 ;q<n;q++){
copy.push_back(inputSeq[q]);
}
if(!valid_g(copy))
return 0;
long long ans = 1;
std::vector<int> h;
bool njk = false;
for(int q = 0 ;q<n;q++){
if(inputSeq[q] > n)
h.push_back(inputSeq[q]);
else njk = true;
}
if(h.size() == 0)
return 1;
std::sort(h.begin(),h.end());
int last_value = n;
int cnt =0;
while(h.size() != cnt) {
ans *= power(h.size() - cnt,h[cnt] - last_value - 1);
ans %= mod;
last_value = h[cnt];
cnt++;
}
if(!njk){
while(true){
ans++;
}
ans *= (long long)n;
ans %= mod;
}
return int(ans);
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |