Submission #30343

#TimeUsernameProblemLanguageResultExecution timeMemory
30343inqrGondola (IOI14_gondola)C++14
Compilation error
0 ms0 KiB
#include "gondola.h" #include <bits/stdc++.h> #define pb push_back #define mp make_pair #define rt insert #define st first #define nd second #define ll long long #define pii pair < int , int > #define DB printf("debug\n"); #define umax( x , y ) x = max( x , (y) ) #define umin( x , y ) x = min( x , (y) ) #define all(x) x.begin() , x.end() #define MOD 1000000009 using namespace std; int nx(int i,int sz){ return (i+1)%(sz); } map < int,int > timesseen; int origl=-1; int broken=0; long long ans=1; int valid(int n, int inputSeq[]) { vector < int > orig; for(int i=0;i<n;i++){ int nxx=nx(i,n); timesseen[inputSeq[i]]++; if(timesseen[inputSeq[i]]>1)return 0; if(inputSeq[i]<=n)orig.pb(inputSeq[i]); if(inputSeq[i]<=n&&inputSeq[nxx]<=n){ if(inputSeq[i]==n && inputSeq[nxx]!=1)return 0; else if(inputSeq[i]<n && inputSeq[nxx]!=inputSeq[i]+1)return 0; } } int startover=0; for(int i=0;i<orig.size();i++){ int nxx=nx(i,orig.size()); if(orig[i]<orig[nxx])continue; else if(startover==0)startover++; else if(startover==1)return 0; } return 1; } //---------------------- int replacement(int n, int gondolaSeq[], int replacementSeq[]) { for(int i=0;i<n;i++){ int nxx=nx(i,n); if(gondolaSeq[i]<=n){ origl=i-(gondolaSeq[i]-1)+n; origl%=n; } umax(broken,gondolaSeq[i]-n); } if(origl==-1){ origl=0; ans*=n; ans%=MOD; } int repind[broken]; set < int > repcand; int orig[n]; for(int i=0;i<n;i++){ int ogon=(i+1)-origl+n; if(ogon>n)ogon%=n; orig[i]=ogon; if(gondolaSeq[i]>n){ repcand.insert(i); repind[gondolaSeq[i]-n-1]=i; } } for(int i=0;i<broken;i++){ if(!repind[i]){ ans*=repcand.size();ans%=MOD; replacementSeq[i]=orig[*repcand.begin()]; orig[*repcand.begin()]=i+n+1; } else{ replacementSeq[i]=orig[repind[i]]; orig[repind[i]]=i+n+1; repcand.erase(repcand.find(repind[i])); } } return broken; } int replacement2(int n, int gondolaSeq[]) { for(int i=0;i<n;i++){ int nxx=nx(i,n); if(gondolaSeq[i]<=n){ origl=i-(gondolaSeq[i]-1)+n; origl%=n; } umax(broken,gondolaSeq[i]-n); } if(origl==-1){ origl=0; ans*=n; ans%=MOD; } int repind[broken]; set < int > repcand; int orig[n]; for(int i=0;i<n;i++){ int ogon=(i+1)-origl+n; if(ogon>n)ogon%=n; orig[i]=ogon; if(gondolaSeq[i]>n){ repcand.insert(i); repind[gondolaSeq[i]-n-1]=i; } } for(int i=0;i<broken;i++){ if(!repind[i]){ ans*=repcand.size();ans%=MOD; orig[*repcand.begin()]=i+n+1; } else{ replacementSeq[i]=orig[repind[i]]; orig[repind[i]]=i+n+1; } } return broken; } //---------------------- int countReplacement(int n, int inputSeq[]) { if(valid(n,inputSeq)==0)return 0; int a=replacement2(n,gondolaSeq); if(a==0)return 1; return ans; }

Compilation message (stderr)

gondola.cpp: In function 'int valid(int, int*)':
gondola.cpp:37:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0;i<orig.size();i++){
               ^
gondola.cpp: In function 'int replacement(int, int*, int*)':
gondola.cpp:51:7: warning: unused variable 'nxx' [-Wunused-variable]
   int nxx=nx(i,n);
       ^
gondola.cpp: In function 'int replacement2(int, int*)':
gondola.cpp:95:7: warning: unused variable 'nxx' [-Wunused-variable]
   int nxx=nx(i,n);
       ^
gondola.cpp:128:4: error: 'replacementSeq' was not declared in this scope
    replacementSeq[i]=orig[repind[i]];
    ^
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:140:25: error: 'gondolaSeq' was not declared in this scope
    int a=replacement2(n,gondolaSeq);
                         ^