Submission #701945

#TimeUsernameProblemLanguageResultExecution timeMemory
701945PCTprobabilityGondola (IOI14_gondola)C++17
Compilation error
0 ms0 KiB
#include <bits/stdc++.h>
#include "gondola.h"
using namespace std;
using ll = long long;
const ll mod = 1000000009;
int valid(int n, int inputSeq[]){
  for(int i=0;i<n;i++) inputSeq[i]--;
  set<int> s;
  for(int i=0;i<n;i++) s.insert(inputSeq[i]);
  if(s.size()!=n) return 0;
  for(int i=0;i<n;i++){
    if(inputSeq[i]<n){
      for(int j=0;j<n;j++){
        if(inputSeq[(i+j)%n]<n&&inputSeq[(i+j)%n]!=(inputSeq[i]+j)%n) return 0;
      }
      return 1;
    }
  }
  return 1;
}
int replacement(int n, int gondolaSeq[], int replacementSeq[]){
  for(int i=0;i<n;i++) gondolaSeq[i]--;
  int m=0;
  for(int i=0;i<n;i++) m=max(m,gondolaSeq[i]);
  vector<int> gon(n);
  int v=0;
  for(int i=0;i<n;i++){
    if(gondolaSeq[i]<n){
      v=(i-gondolaSeq[i]+n)%n;
    }
  }
  for(int i=0;i<n;i++) gon[(i+v)%n]=i;
  vector<int> rev(500000,-1);
  for(int i=0;i<n;i++) rev[gondolaSeq[i]]=i;
  set<int> idx;
  for(int i=0;i<n;i++){
    if(gondolaSeq[i]>=n) idx.insert(i);
  }
  for(int i=n;i<=m;i++){
    if(rev[i]==-1){
      int id=(*idx.begin());
      replacementSeq[i-n]=gon[id]+1;
      gon[id]=i;
    }
    else{
      replacementSeq[i-n]=gon[rev[i]]+1;
      idx.erase(rev[i]);
      gon[rev[i]]=i;
    }
  }
  return m-n+1;
}
int countReplacement(int n, int inputSeq[]){
  bool ok=true;
  set<int> s;
  for(int i=0;i<n;i++) s.insert(inputSeq[i]);
  if(s.size()!=n) ok=false;
  for(int i=0;i<n;i++){
    if(inputSeq[i]<n){
      for(int j=0;j<n;j++){
        if(inputSeq[(i+j)%n]<n&&inputSeq[(i+j)%n]!=(inputSeq[i]+j)%n) ok=false;
      }
      break;
    }
  }
  if(!ok) return 0;
  int m=0;
  for(int i=0;i<n;i++) m=max(m,gondolaSeq[i]);
  vector<int> gon(n);
  int v=0;
  for(int i=0;i<n;i++){
    if(gondolaSeq[i]<n){
      v=(i-gondolaSeq[i]+n)%n;
    }
  }
  ll ans=1;
  for(int i=0;i<n;i++) gon[(i+v)%n]=i;
  vector<int> rev(500000,-1);
  for(int i=0;i<n;i++) rev[gondolaSeq[i]]=i;
  set<int> idx;
  for(int i=0;i<n;i++){
    if(gondolaSeq[i]>=n) idx.insert(i);
  }
  for(int i=n;i<=m;i++){
    if(rev[i]==-1){
      ans*=idx.size();
      ans%=mod;
      int id=(*idx.begin());
      replacementSeq[i-n]=gon[id]+1;
      gon[id]=i;
    }
    else{
      replacementSeq[i-n]=gon[rev[i]]+1;
      idx.erase(rev[i]);
      gon[rev[i]]=i;
    }
  }
  return int(ans);
}

Compilation message (stderr)

gondola.cpp: In function 'int valid(int, int*)':
gondola.cpp:10:14: warning: comparison of integer expressions of different signedness: 'std::set<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   10 |   if(s.size()!=n) return 0;
      |      ~~~~~~~~^~~
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:57:14: warning: comparison of integer expressions of different signedness: 'std::set<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   57 |   if(s.size()!=n) ok=false;
      |      ~~~~~~~~^~~
gondola.cpp:68:32: error: 'gondolaSeq' was not declared in this scope
   68 |   for(int i=0;i<n;i++) m=max(m,gondolaSeq[i]);
      |                                ^~~~~~~~~~
gondola.cpp:72:8: error: 'gondolaSeq' was not declared in this scope
   72 |     if(gondolaSeq[i]<n){
      |        ^~~~~~~~~~
gondola.cpp:79:28: error: 'gondolaSeq' was not declared in this scope
   79 |   for(int i=0;i<n;i++) rev[gondolaSeq[i]]=i;
      |                            ^~~~~~~~~~
gondola.cpp:82:8: error: 'gondolaSeq' was not declared in this scope
   82 |     if(gondolaSeq[i]>=n) idx.insert(i);
      |        ^~~~~~~~~~
gondola.cpp:89:7: error: 'replacementSeq' was not declared in this scope; did you mean 'replacement'?
   89 |       replacementSeq[i-n]=gon[id]+1;
      |       ^~~~~~~~~~~~~~
      |       replacement
gondola.cpp:93:7: error: 'replacementSeq' was not declared in this scope; did you mean 'replacement'?
   93 |       replacementSeq[i-n]=gon[rev[i]]+1;
      |       ^~~~~~~~~~~~~~
      |       replacement