이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "gondola.h"
#include <cmath>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
bool mark[300100];
int valid(int n, int inputSeq[])
{
int key=-1;
int id=-1;
int cur;
for (int i=0;i<n;i++) {
inputSeq[i]--;
if (mark[inputSeq[i]]) return 0;
mark[inputSeq[i]]=true;
}
for (int i=0;i<n;i++) {
if (inputSeq[i]>=n) continue;
key=inputSeq[i];
id=i;
}
for (int i=0;i<n;i++) {
if (inputSeq[i]>=n) continue;
cur=key+i-id;
cur%=n;
cur+=n;
cur%=n;
if (inputSeq[i]!=cur) return 0;
}
return 1;
}
//----------------------
int init[100100];
int replacement(int n, int gondolaSeq[], int replacementSeq[])
{
int id=0;
int key=1;
for (int i=0;i<n;i++) {
if (gondolaSeq[i]>n) continue;
id=i;
key=gondolaSeq[i];
break;
}
init[id]=key;
for (int i=id+1;i<n;i++) {
init[i]=init[i-1]+1;
if (init[i]>n) init[i]-=n;
}
for (int i=id-1;i>=0;i--) {
init[i]=init[i+1]-1;
if (init[i]<=0) init[i]+=n;
}
vector<pair<int,int>> ei;
for (int i=0;i<n;i++) {
if (gondolaSeq[i]<=n) continue;
ei.push_back({gondolaSeq[i],i});
}
sort(ei.begin(),ei.end());
int sz=0;
int curid=0;
int curcar=n+1;
int curgon=0;
for (int i=0;i<(int)ei.size();i++) {
while (curcar<ei[i].first) {
while (init[curgon]==gondolaSeq[curgon]) curgon++;
replacementSeq[sz++]=init[curgon];
init[curgon]=curcar;
curcar++;
}
replacementSeq[sz++]=init[ei[i].second];
init[ei[i].second]=ei[i].first;
curcar++;
}
return sz;
}
//----------------------
//
int mod=1000000009;
long long poww(long long b,int x) {
if (x==0) return 1;
if (x==1) return b;
long long tmp=poww(b,x/2);
tmp*=tmp;
tmp%=mod;
if (x%2) return (tmp*b)%mod;
return tmp;
}
int countReplacement(int n, int inputSeq[])
{
if (!valid(n,inputSeq)) return 0;
for (int i=0;i<n;i++) inputSeq[i]++;
int id=0;
int key=1;
for (int i=0;i<n;i++) {
if (inputSeq[i]>n) continue;
id=i;
key=inputSeq[i];
break;
}
init[id]=key;
for (int i=id+1;i<n;i++) {
init[i]=init[i-1]+1;
if (init[i]>n) init[i]-=n;
}
for (int i=id-1;i>=0;i--) {
init[i]=init[i+1]-1;
if (init[i]<=0) init[i]+=n;
}
vector<pair<int,int>> ei;
for (int i=0;i<n;i++) {
if (inputSeq[i]<=n) continue;
ei.push_back({inputSeq[i],i});
}
sort(ei.begin(),ei.end());
int curcar=n+1;
int cnt=ei.size();
long long ans=1;
for (int i=0;i<(int)ei.size();i++) {
ans*=poww(cnt,ei[i].first-curcar);
ans%=mod;
curcar=ei[i].first+1;
cnt--;
}
return ans;
}
컴파일 시 표준 에러 (stderr) 메시지
gondola.cpp: In function 'int replacement(int, int*, int*)':
gondola.cpp:69:6: warning: unused variable 'curid' [-Wunused-variable]
int curid=0;
^~~~~
# | 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... |