# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1042945 | dpsaveslives | 곤돌라 (IOI14_gondola) | C++17 | 38 ms | 6004 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "gondola.h"
#include <bits/stdc++.h>
#define f first
#define s second
#define ll long long
using namespace std;
const int MAXN = 1e5;
const int MOD = 1e9+9;
ll fac[MAXN+1];
void factorial(){
fac[0] = 1;
for(int i = 1;i<=MAXN;++i){
fac[i] = fac[i-1]*i%MOD;
}
}
ll exp(ll x, ll n){
x %= MOD;
ll res = 1;
while(n > 0){
if(n % 2 == 1){
res = res*x%MOD;
}
x = x*x%MOD;
n /= 2;
}
return res;
}
int valid(int n, int inputSeq[]){
int pos = -1; set<int> vals;
for(int i = 0;i<n;++i){
if(inputSeq[i] <= n && pos == -1){
pos = i;
}
vals.insert(inputSeq[i]);
}
if(vals.size() != n){
return 0;
}
if(pos == -1){
return 1;
}
int cur = inputSeq[pos];
for(int i = pos;i<n;++i){
if(inputSeq[i] <= n){
//cout << i << " " << cur << "\n";
if(inputSeq[i] != cur){
return 0;
}
}
if(cur == n){
cur = 0;
}
++cur;
}
for(int i = 0;i<=pos-1;++i){
if(inputSeq[i] <= n){
if(inputSeq[i] != cur){
return 0;
}
}
if(cur == n){
cur = 0;
}
++cur;
}
return 1;
}
int replacement(int n, int gondolaSeq[], int replacementSeq[]){
vector<pair<int,int>> arr;
int pos = -1; bool any = false;
for(int i = 0;i<n;++i){
if(gondolaSeq[i] <= n){
if(pos == -1){
pos = i;
}
}
else{
any = true;
arr.push_back({gondolaSeq[i],i});
}
}
if(!any){
return 0;
}
int rep = 0, cur;
if(pos != -1){
cur = gondolaSeq[pos];
}
else{
cur = 1;
pos = 0;
}
vector<int> reps(n,-1);
for(int i = pos;i<n;++i){
if(gondolaSeq[i] > n){
reps[i] = cur;
}
if(cur == n){
cur = 0;
}
++cur;
}
for(int i = 0;i<=pos-1;++i){
if(gondolaSeq[i] > n){
reps[i] = cur;
}
if(cur == n){
cur = 0;
}
++cur;
}
sort(arr.begin(),arr.end());
cur = n+1; int i = 0;
while(i < arr.size()){
replacementSeq[rep] = reps[arr[i].s];
//cout << rep << " " << replacementSeq[rep] << "\n";
++rep;
while(cur < arr[i].f){ //until arr[i] = cur
replacementSeq[rep] = cur;
//cout << rep << " " << replacementSeq[rep] << "\n";
++rep; ++cur;
}
++cur; ++i;
}
return rep;
}
int countReplacement(int n, int inputSeq[]){
if(!valid(n,inputSeq)) return 0;
int pos = -1; bool any = false;
vector<pair<int,int>> arr;
for(int i = 0;i<n;++i){
if(inputSeq[i] <= n){
if(pos == -1){
pos = i;
}
}
else{
any = true;
arr.push_back({inputSeq[i],i});
}
}
if(!any){
return 1;
}
ll ans = 1ll;
if(pos != -1){
sort(arr.begin(),arr.end());
int cur = n; int i = 0; ll cnt = arr.size();
while(i < arr.size()){
ll x = exp(1ll*cnt,1ll*(arr[i].f-cur-1));
ans = ans*x%MOD;
cur = arr[i].f;
++i; --cnt;
}
}
else{
sort(arr.begin(),arr.end());
int cur = n-1; int i = 0; ll cnt = arr.size();
while(i < arr.size()){
ll x = exp(1ll*cnt,1ll*(arr[i].f-cur-1));
ans = ans*x%MOD;
cur = arr[i].f;
++i; --cnt;
}
/*if(n == 2){
return ans;
}
factorial();
ll x = fac[n]; x -= n;
x %= MOD;
ll inv = exp(x,MOD-2);
ans = ans*inv%MOD;*/
}
return 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... |