답안 #49259

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
49259 2018-05-24T14:36:29 Z doowey 곤돌라 (IOI14_gondola) C++14
컴파일 오류
0 ms 0 KB
    #include <bits/stdc++.h>
    #include "gondola.h"
     
    using namespace std;
    typedef pair<int,int> pii;
    typedef long long int ll;
     
    #define fi first
    #define se second
    #define mp make_pair
     
    const int N = 250099
     
    int valid(int n, int inputSeq[])
    {
      int cnt[N];
      for(int j = 0;j < N;j ++ )
        cnt[j] = 0;
      int rest[n];
      int maz = (int)4e5 + 12345;
      for(int i = 0; i < n;i ++){
        cnt[inputSeq[i]]++;
        if(cnt[inputSeq[i]] >= 2)
          return 0;
        maz = min(maz, inputSeq[i]);
        rest[i] = inputSeq[i];
      }
      if(maz > n)
        return 1;
      int p,j;
      for(int i = 0;i < n;i ++ ){
        if(rest[i] <= n){
          p = rest[i]+1;
          j = i+1;
          j %= N;
          while(p <= n){
            rest[j] = p;
            p++;
            j++;
            j%=n;
          }
          p = 1;
          while(p < rest[i]){
            rest[j] = p;
            j++;
            j %= n;
            p++;
          }
          break;
        }
      }
      for(int i = 0; i < n;i ++){
        if(inputSeq[i] <= n){
          if(rest[i] != inputSeq[i])
            return 0;
        }
      }
      return 1;
    }
     
    //----------------------
     
    int replacement(int n, int gondolas[], int replacementSeq[])
    {
      int rx = 0;
      int start[n];
      bool is = false;
      for(int i = 0;i < n;i ++){
        if(gondolas[i] > n)
          is = true;
        if(gondolas[i] <= n)
          rx = i;
      }
      if(is == false)
        return 0;
      int ini;
      if(gondolas[rx] > n)
        start[rx] = 1;
      else
        start[rx] = gondolas[rx];
      int p = start[rx] + 1;
      ini = start[rx];
      rx ++ ;
      while(p <= n){
        rx %= n;
        start[rx] = p;
        rx++;
        p++;
      }
      p = 1;
      rx %= n;
      while(p < ini){
        start[rx] = p;
        p++;
        rx++;
        rx %= n;
      }
      vector<pii>qq;
      for(int i = 0;i < n;i ++){
        if(start[i] < gondolas[i]){
          qq.push_back(mp(gondolas[i],i));
        }
      }
      sort(qq.begin(),qq.end());
      int mak;
      int ii = n + 1;
      int ix;
      int sz = 0;
      for(auto x : qq){
        mak = x.fi;
        ix = x.se;
        replacementSeq[sz] = start[ix];
        sz++;
        start[ix] = ii;
        ii++;
        while(start[ix] < mak){
          replacementSeq[sz] = start[ix];
          start[ix] = ii;
          sz++;
          ii++;
        }
        ii = mak + 1;
      }
      return sz;
    }
     
    //----------------------
     
    const ll MOD = (int)1e9 + 9;
     
    ll cr;
     
    ll powr(ll n,ll k){
      if(k == 0)
        return 1LL;
      cr = powr(n,k/2);
      cr = (cr * cr) % MOD;
      if(k & 1)
        cr = (cr * n) % MOD;
      return cr;
    }
     
    int countReplacement(int n, int seq[])
    {
      if(!valid(n,seq)){
        return 0;
      }
      int tk = 1000000009;
      for(int i = 0;i < n;i ++){
        tk = min(tk,seq[i]);
      }
      ll ans = 1;
      if(tk > n)
        ans = n;
      vector<ll>R;
      for(int i = 0;i < n;i ++){
        if(seq[i] > n)
          R.push_back((ll)seq[i]);
      }
      R.push_back(n);
      sort(R.begin(),R.end());
      ll ff = (ll)R.size();
      ff--;
      for(int i = 1;i < R.size(); i ++){
        ans *= powr(ff,R[i] - R[i - 1] - 1);
        ans %= MOD;
        --ff;
      }
      return ans;
    }

Compilation message

gondola.cpp:14:5: error: expected ',' or ';' before 'int'
     int valid(int n, int inputSeq[])
     ^~~
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:164:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
       for(int i = 1;i < R.size(); i ++){
                     ~~^~~~~~~~~~