Submission #165379

#TimeUsernameProblemLanguageResultExecution timeMemory
165379cfalasGondola (IOI14_gondola)C++14
75 / 100
65 ms8252 KiB
#include "gondola.h" #include<bits/stdc++.h> using namespace std; #define MOD 1000000009 #define ll long long int valid(int n, int a[]){ map<int, bool> used; for(int i=0;i<n;i++){ if(used[a[i]]) return 0; used[a[i]] = true; } int s = 0; for(int i=0;i<n;i++){ if(a[i]<=n){ s = i; break; } } for(int i=0;i<n;i++){ if(a[i]<=n && (a[i]+(s-i) - 1 + n)%n + 1 != a[s]) return 0; } return 1; } //---------------------- int replacement(int n, int a[], int ans[]){ int apos=-1, av; int maxf=0; int minf = 0; unordered_map<int, int> m; for(int i=0;i<n;i++){ if(a[i]<=n) apos = i, av=a[i]; else m[a[i]] = i+1; maxf = max(maxf, a[i]); if(a[minf]>a[i]) minf = i; } if(apos==-1){ apos = minf; av = 1; } queue<int> q; int l=0; for(int i=n+1;i<=maxf;i++){ if(m[i]){ int c = l - 1; ans[l] = (n + av - (apos - m[i] + 1) - 1) % n + l - c; l++; //cout<<apos<<" "<<m[i]<<" "<<av<<endl; while(!q.empty()){ ans[l] = q.front(); q.pop(); l++; } } else q.push(i); } return l; } //---------------------- int mpow(int a, int b){ if(b==0) return 1; if(b==1) return a; ll z = mpow(a, b/2); z*=z; z%=MOD; if(b%2) z*=a; z%=MOD; return z; } int countReplacement(int n, int a[]){ if(!valid(n, a)){ return 0; } vector<int> gaps; int act=-1; int un=0; for(int i=0;i<n;i++){ if(a[i]<=n){ act = i; } else un++; } sort(a, a+n); int ans=1; if(!act==-1) ans*=n; for(int i=0;i<n-1;i++){ if(a[i+1]<=n) continue; if(a[i]<=n) a[i] = n; //cout<<un<<" "<<mpow(un, a[i+1]-a[i]-1)<<" "<<a[i]<<" "<<a[i+1]<<endl; ans *= mpow(un, a[i+1]-a[i]-1); ans%=MOD; un--; } return ans; }

Compilation message (stderr)

gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:92:9: warning: logical not is only applied to the left hand side of comparison [-Wlogical-not-parentheses]
  if(!act==-1) ans*=n;
         ^~
gondola.cpp:92:5: note: add parentheses around left hand side expression to silence this warning
  if(!act==-1) ans*=n;
     ^~~~
     (   )
gondola.cpp:92:9: warning: comparison of constant '-1' with boolean expression is always false [-Wbool-compare]
  if(!act==-1) ans*=n;
     ~~~~^~~~
#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...