Submission #162042

#TimeUsernameProblemLanguageResultExecution timeMemory
162042oolimryGondola (IOI14_gondola)C++14
100 / 100
121 ms6152 KiB
#include "gondola.h" #include <bits/stdc++.h> using namespace std; long long mod = 1000000009; long long power(long long b, long long p){ if(p == 0) return 1; if(p % 2 == 0){ long long a = power(b,p/2); return (a * a) % mod; } else{ return (power(b,p-1) * b) % mod; } } int valid(int n, int arr[]) { set<int> sset; for(int i = 0;i < n;i++){ sset.insert(arr[i]); } if(sset.size() != n) return 0; int anchor = -1; for(int i = 0;i < n;i++){ if(arr[i] <= n){ anchor = (arr[i] - i + n) % n; break; } } if(anchor == -1) return 1; for(int i = 0;i < n;i++){ if(arr[i] <= n){ if(arr[i] % n != (anchor + i) % n){ return 0; } } } return 1; } int replacement(int n, int arr[], int replacementSeq[]) { int anchor = 0; int ori[n]; map<int,int> m; set<int> s; for(int i = 0;i < n;i++){ if(arr[i] <= n){ anchor = (arr[i] - i + n) % n; break; } } int maxv = 0; int maxpos = 0; for(int i = 0;i < n;i++){ ori[i] = (anchor+i) % n; if(ori[i] == 0) ori[i] = n; if(arr[i] > maxv){ maxv = arr[i]; maxpos = i; } if(arr[i] > n){ m[arr[i]] = i; } } int cnt = 0; for(int r = n+1;r <= maxv;r++){ int rindex = 0; if(m.find(r) == m.end()){ rindex = maxpos; } else{ rindex = m[r]; } replacementSeq[cnt] = ori[rindex]; ori[rindex] = r; cnt++; } return cnt; } int countReplacement(int n, int arr[]) { if(!valid(n,arr)) return 0; long long ans = 1; int maxv = 0; int freee = n; set<int> s; bool has = true; vector<int> v; for(int i = 0;i < n;i++){ maxv = max(maxv, arr[i]); if(arr[i] <= n){ freee--; has = false; } else{ v.push_back(arr[i]); } } sort(v.begin(),v.end()); int pre = n; for(int x : v){ long long p = x - pre - 1; ans *= power(freee,p); ans %= mod; pre = x; freee--; } if(has){ ans *= n; ans %= mod; } return ans; }

Compilation message (stderr)

gondola.cpp: In function 'int valid(int, int*)':
gondola.cpp:20:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  if(sset.size() != n) return 0;
     ~~~~~~~~~~~~^~~~
#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...