답안 #746159

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
746159 2023-05-21T14:20:15 Z Username4132 곤돌라 (IOI14_gondola) C++14
100 / 100
18 ms 3028 KB
#include "gondola.h"
#include<algorithm>
#include<iostream>
#include<map>
using namespace std;
using ll = long long;
#define forn(i, n) for(int i=0; i<(int)n; ++i)
#define forsn(i, s, n) for(int i=s; i<(int)n; ++i)

const int MAXN=250010, MOD=1000000009;
int arr[MAXN], pos[MAXN], cp[100010];

int valid(int n, int inputSeq[])
{

  forn(i, n) cp[i]=inputSeq[i];
  sort(cp, cp+n);
  forn(i, n-1) if(cp[i]==cp[i+1]) return 0;

  auto itr=min_element(inputSeq, inputSeq+n);
  if(*itr>=n) return 1;
  auto tmp=itr, last=itr;
  while(true){
    if(*tmp<=n){
      int d1=*tmp-*last, d2=tmp-last;
      if(d2<0) d2+=n;
      if(d1!=d2) return 0;
      last=tmp;
    }
    tmp++;
    if(tmp==inputSeq+n) tmp=inputSeq;
    if(tmp==itr) break;
  }
  return 1;
}

//----------------------

int replacement(int n, int gondolaSeq[], int replacementSeq[])
{
  int offset=0;
  forn(i, n) if(gondolaSeq[i]<=n) offset=i-gondolaSeq[i]+1;
  if(offset<0) offset+=n;
  int cur=offset, num=1;
  while(true){
    arr[cur++]=num++;
    if(cur>=n) cur-=n;
    if(cur==offset) break;
  }

  int mx=max_element(gondolaSeq, gondolaSeq+n)-gondolaSeq;
  forn(i, gondolaSeq[mx] + 1) pos[i]=-1;
  forn(i, n) pos[gondolaSeq[i]]=i;

  int ans=0;
  forsn(i, n+1, gondolaSeq[mx] + 1){
    int p=pos[i];
    if(p==-1) p=mx;
    replacementSeq[ans++]=arr[p];
    arr[p]=i;
  }

  return ans;
}

//----------------------
ll ex(ll b, ll e){
  ll ret=1;
  while(e>0){
    if(e&1) ret = (ret*b)%MOD;
    b = (b*b)%MOD;
    e>>=1;
  }
  return ret;
}

int countReplacement(int n, int inputSeq[])
{
  if(!valid(n, inputSeq)) return 0;
  ll ans=1;
  int pr=n;
  forn(i, n) if(cp[i]>n) ans=(ans*ex(n-i, cp[i]-pr-1))%MOD, pr=cp[i];
  if(cp[0]>n) ans=(ans*n)%MOD;
  return ans;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 6 ms 600 KB Output is correct
7 Correct 12 ms 996 KB Output is correct
8 Correct 8 ms 852 KB Output is correct
9 Correct 3 ms 468 KB Output is correct
10 Correct 13 ms 964 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 7 ms 596 KB Output is correct
7 Correct 12 ms 980 KB Output is correct
8 Correct 8 ms 812 KB Output is correct
9 Correct 3 ms 468 KB Output is correct
10 Correct 13 ms 852 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 0 ms 212 KB Output is correct
13 Correct 6 ms 468 KB Output is correct
14 Correct 0 ms 212 KB Output is correct
15 Correct 13 ms 980 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 1 ms 304 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 1 ms 340 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
11 Correct 8 ms 1492 KB Output is correct
12 Correct 9 ms 1628 KB Output is correct
13 Correct 14 ms 1848 KB Output is correct
14 Correct 9 ms 1620 KB Output is correct
15 Correct 16 ms 3028 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 300 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 304 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 308 KB Output is correct
8 Correct 1 ms 212 KB Output is correct
9 Correct 15 ms 1248 KB Output is correct
10 Correct 16 ms 1176 KB Output is correct
11 Correct 4 ms 596 KB Output is correct
12 Correct 5 ms 596 KB Output is correct
13 Correct 2 ms 364 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 1 ms 300 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 1 ms 212 KB Output is correct
9 Correct 13 ms 1364 KB Output is correct
10 Correct 11 ms 1088 KB Output is correct
11 Correct 4 ms 596 KB Output is correct
12 Correct 6 ms 724 KB Output is correct
13 Correct 1 ms 316 KB Output is correct
14 Correct 15 ms 1752 KB Output is correct
15 Correct 18 ms 2068 KB Output is correct
16 Correct 6 ms 596 KB Output is correct
17 Correct 13 ms 1324 KB Output is correct
18 Correct 9 ms 932 KB Output is correct