# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
235808 | DanerZein | Gondola (IOI14_gondola) | C++14 | 45 ms | 5120 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "gondola.h"
#include <bits/stdc++.h>
#define MAX 100000000
#define mod 1000000009
using namespace std;
typedef pair<int,int> ii;
int valid(int n, int inputSeq[])
{
set<int>s;
int id,mi;
mi=MAX;
id=0;
for(int i=0;i<n;i++){
if(mi>inputSeq[i]){
id=i;
mi=inputSeq[i];
}
s.insert(inputSeq[i]);
}
bool sw=0;
int vis[100000];
memset(vis,0,sizeof vis);
if(mi<=n){
// cout<<"hi"<<endl;
int j=id;
int aux=mi;
while(true){
if(vis[j]!=0) break;
if(j==n) j=0;
if(aux==n+1) aux=1;
if(inputSeq[j]<=n){
// cout<<inputSeq[j]<<" "<<aux<<" "<<j<<endl;
if(inputSeq[j]!=aux) return 0;
}
vis[j]=1;
j++;
aux++;
}
//cout<<"1"<<endl;
if(s.size()!=n) return 0;
return 1;
}
if(s.size()!=n) return 0;
else return 1;
}
//----------------------
int replacement(int n, int gondolaSeq[], int replacementSeq[])
{
vector<bool> nf(250010,false);
vector<ii> gn;
int mi=MAX,id;
for(int i=0;i<n;i++){
if(mi>gondolaSeq[i]){
mi=gondolaSeq[i];
id=i;
}
//mi=min(mi,gondolaSeq[i]);
if(gondolaSeq[i]>n){
gn.push_back(ii(gondolaSeq[i],-1));
}
else{
nf[gondolaSeq[i]]=true;
}
}
vector<int> go,gon(n,-1);
if(mi>n){
for(int i=0;i<n;i++){
gon[i]=(i+1);
}
}
else{
int j=id;
int aux=mi;
while(true){
if(j==gon.size()) j=0;
if(gon[j]!=-1) break;
gon[j]=aux;
if(aux==n){
aux=0;
}
aux++;
j++;
}
}
int j=0;
for(int i=0;i<gon.size();i++){
// cout<<gon[i]<<" ";
if(nf[gon[i]]==false){
gn[j].second=gon[i];
j++;
}
}
// cout<<endl;
int ga=n+1;
j=0;
int t=0;
sort(gn.begin(),gn.end());
/* for(int i=0;i<gn.size();i++){
cout<<gn[i]<<" ";
}
cout<<endl;
for(int i=0;i<go.size();i++){
cout<<go[i]<<" ";
}
cout<<endl;*/
for(int i=0;i<gn.size();i++){
replacementSeq[j]=gn[i].second;
j++;
t++;
while(true){
if(ga==gn[i].first){
ga++;
break;
}
// ga++;
replacementSeq[j]=ga;
ga++;
j++;
t++;
}
}
//cout<<t<<endl;
return t;
}
//----------------------
int countReplacement(int n, int inputSeq[])
{
//cout<<"hi"<<endl;
//cout<<valid(n,inputSeq)<<endl;
if(valid(n,inputSeq)){
vector<long long>gn;
for(int i=0;i<n;i++){
if(inputSeq[i]>n){
gn.push_back(inputSeq[i]);
}
}
long long gr=n+1;
long long j=0;
long long r=1;
if(gn.size()==n) r=n;
sort(gn.begin(),gn.end());
while(true){
// cout<<j<<" "<<gn[j]<<" "<<gr<<" "<<r<<endl;
if(j==gn.size()) break;
int aux=abs(gn[j]-gr)-1;
/* if(gr==gn[j]){
gr++;
j++;
continue;
}*/
if(aux>1)
r=(r%mod*((gn.size()-j)*aux)%mod)%mod;
//gr++;
gr=gn[j];
j++;
}
return r;
}
else {
return 0;}
}
컴파일 시 표준 에러 (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... |