Submission #634808

#TimeUsernameProblemLanguageResultExecution timeMemory
634808PoonYaPatGondola (IOI14_gondola)C++14
30 / 100
12 ms1272 KiB
#include "gondola.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; const int mod=1000000009; bool have[250001]; int head[250001]; int valid(int n, int s[]) { bool ans=true; int sc; for (int i=0; i<n; ++i) { if (s[i]<=n) { sc=i; break; } } int val=s[sc]; for (int i=sc+1; i<n; ++i) { ++val; if (val>n) val-=n; if (s[i]<=n && s[i]!=val) { ans=false; break; } } return ans; } //---------------------- int replacement(int n, int s[], int ans[]) { int mmax=0,hm,sc=0; bool fix=false; for (int i=0; i<n; ++i) { mmax=max(mmax,s[i]); if (s[i]<=n) { fix=true; if (sc==0) sc=i; } } if (!fix) { for (int i=0; i<n; ++i) { head[s[i]]=i+1; } } else { int val=s[sc]; for (int i=sc; i<n; ++i) head[s[i]]=val++; for (int i=0; i<sc; ++i) head[s[i]]=val++; } hm=head[mmax]; int idx=0; for (int i=n+1; i<mmax; ++i) { if (!head[i]) { ans[idx++]=hm; hm=i; } else { ans[idx++]=head[i]; } } ans[idx]=hm; return mmax-n; } //---------------------- int countReplacement(int n, int s[]) { if (!valid(n,s)) return 0; ll ans=1; bool rot=false; int cnt=n,mmax=0; for (int i=0; i<n; ++i) { have[s[i]]=true; if (s[i]<=n) --cnt; mmax=max(mmax,s[i]); } if (cnt==n) rot=true; for (int i=n+1; i<=mmax; ++i) { if (have[i]) --cnt; else if (cnt) ans=(ans*cnt)%mod; } if (rot) { for (int i=1; i<=n; ++i) ans=(ans*i)%mod; } return ans%mod; }

Compilation message (stderr)

gondola.cpp: In function 'int valid(int, int*)':
gondola.cpp:23:15: warning: 'sc' may be used uninitialized in this function [-Wmaybe-uninitialized]
   23 |     int val=s[sc];
      |               ^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...