Submission #1019839

#TimeUsernameProblemLanguageResultExecution timeMemory
1019839NValchanovGondola (IOI14_gondola)C++17
60 / 100
33 ms5340 KiB
#include <bits/stdc++.h> #include "gondola.h" #define endl '\n' using namespace std; typedef long long ll; const int MOD = 1e9 + 7; int valid(int n, int a[]) { set < int > cnt; int min_idx = 0; for(int i = 1; i < n; i++) { if(a[i] < a[min_idx]) min_idx = i; if(cnt.count(a[i])) return 0; cnt.insert(a[i]); } vector < int > order; for(int i = min_idx; i < n; i++) { order.push_back(a[i]); } for(int i = 0; i < min_idx; i++) { order.push_back(a[i]); } for(int i = 1; i < n; i++) { if(order[i] <= n && order[i] - order[0] != i) return 0; } return 1; } int replacement(int n, int a[], int ans[]) { int min_idx = 0; int maxel = 0; for(int i = 0; i < n; i++) { if(a[i] < a[min_idx]) min_idx = i; maxel = max(maxel, a[i]); } vector < int > order; for(int i = min_idx; i < n; i++) { order.push_back(a[i]); } for(int i = 0; i < min_idx; i++) { order.push_back(a[i]); } vector < pair < int, int > > broken; for(int i = 0; i < n; i++) { if(order[i] > n) broken.push_back({order[i], i}); } sort(broken.begin(), broken.end()); if(order.front() > n) order.front() = 1; for(int i = 1; i < n; i++) { if(order[i - 1] == n) { order[i] = 1; } else { order[i] = order[i - 1] + 1; } } int last = n; int pos = 0; for(pair < int, int > p : broken) { int val = p.first; int idx = p.second; while(last < val) { ans[pos++] = order[idx]; order[idx] = ++last; } } return maxel - n; } ll binpow(ll a, ll b) { ll result = 1; while(b) { if(b & 1) result = (result * a) % MOD; a = (a * a) % MOD; b /= 2; } return result; } int countReplacement(int n, int a[]) { if(!valid(n, a)) return 0; vector < int > broken; for(int i = 0; i < n; i++) { if(a[i] > n) broken.push_back(a[i]); } sort(broken.begin(), broken.end()); int last = n; ll ans = 1; int sz = broken.size(); for(int i = 0; i < sz; i++) { ans = 1LL * ans * binpow(sz - i, broken[i] - last - 1) % MOD; last = broken[i]; } if(sz == n) ans = 1LL * ans * sz % MOD; return ans; }
#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...