Submission #794758

#TimeUsernameProblemLanguageResultExecution timeMemory
794758aymanrsGondola (IOI14_gondola)C++14
100 / 100
15 ms2176 KiB
#include<bits/stdc++.h> #include "gondola.h" const int MOD = 1e9+9; long long binp(long long a, long long n){ long long r = 1; while(n){ if(n&1) r = r*a%MOD; a = a*a%MOD; n>>=1; } return r; } using namespace std; int valid(int n, int inputSeq[]){ int p[n+1]; fill(p, p+n+1, -1); vector<int> a; a.push_back(n); for(int i = 0;i < n;i++) { if(inputSeq[i] <= n) { if(p[inputSeq[i]] != -1) return 0; p[inputSeq[i]] = i; } else a.push_back(inputSeq[i]); } sort(a.begin(), a.end()); bool f = false; for(int i = 1;i <= n;i++){ if(p[i] == -1) continue; f = true; int pr = i == 1 ? n : i-1; if(p[pr] == -1) continue; if(p[pr] != (p[i]+n-1)%n) return 0; } long long ans = 1; for(int i = 1;i < a.size();i++){ if(a[i] == a[i-1]) return 0; ans = ans*binp(int(a.size())-i, a[i]-a[i-1]-1)%MOD; } if(!f) ans = ans*n%MOD; return 1; } int replacement(int n, int gondolaSeq[], int replacementSeq[]){ int p1 = 0, o[n]; for(int i = 0;i < n;i++){ o[i] = i; if(gondolaSeq[i] <= n){ p1 = (i+n-gondolaSeq[i]+1)%n; } } sort(o, o+n, [&gondolaSeq](int a, int b){return gondolaSeq[a] < gondolaSeq[b];}); int ind = 0, x = n+1; for(int z = 0;z < n;z++){ int i = o[z]; if(gondolaSeq[i] <= n) continue; replacementSeq[ind++] = (i-p1+n)%n + 1; while(x < gondolaSeq[i]){ replacementSeq[ind++] = x++; } x++; } return ind; } int countReplacement(int n, int inputSeq[]){ int p[n+1]; fill(p, p+n+1, -1); vector<int> a; a.push_back(n); for(int i = 0;i < n;i++) { if(inputSeq[i] <= n) { if(p[inputSeq[i]] != -1) return 0; p[inputSeq[i]] = i; } else a.push_back(inputSeq[i]); } sort(a.begin(), a.end()); bool f = false; for(int i = 1;i <= n;i++){ if(p[i] == -1) continue; f = true; int pr = i == 1 ? n : i-1; if(p[pr] == -1) continue; if(p[pr] != (p[i]+n-1)%n) return 0; } long long ans = 1; for(int i = 1;i < a.size();i++){ if(a[i] == a[i-1]) return 0; ans = ans*binp(int(a.size())-i, a[i]-a[i-1]-1)%MOD; } if(!f) ans = ans*n%MOD; return ans; }

Compilation message (stderr)

gondola.cpp: In function 'int valid(int, int*)':
gondola.cpp:36:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   36 |  for(int i = 1;i < a.size();i++){
      |                ~~^~~~~~~~~~
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:86:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   86 |  for(int i = 1;i < a.size();i++){
      |                ~~^~~~~~~~~~
#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...