# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
428684 | markthitrin | 곤돌라 (IOI14_gondola) | C++14 | 63 ms | 4576 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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){
ans *= (long long)n;
ans %= mod;
}
return int(ans);
}
Compilation message (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... |