# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1099445 | beaconmc | Gondola (IOI14_gondola) | C++14 | 0 ms | 0 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
typedef long long ll;
#define FOR(i,x,y) for(ll i=x; i<y; i++)
#define FORNEG(i,x,y) for(ll i=x; i>y; i--)
using namespace std;
bool check_valid(vector<ll>&stuff, ll n){
bool flag = true;
set<ll> cnt;
for (auto&i : stuff) cnt.insert(i);
if (cnt.size() != n) flag = 0;
ll mini = 10000000000;
ll pos = -1;
for (auto&i : stuff) mini = min(mini, i);
FOR(i,0,n) if (stuff[i] == mini)pos=i;
if (mini < n){
FOR(i,0,n){
if (stuff[pos%n] <=n && stuff[pos%n]!=mini) flag = 0;
pos++,mini++;
}
}
return flag;
}
vector<ll> repseq(vector<ll>&stuff, ll n){
vector<ll> should(n);
ll mini = 1000000000;
ll pos = -1;
for (auto&i : stuff) mini = min(mini, i);
FOR(i,0,n) if (stuff[i] == mini)pos=i;
if (mini > n) mini = 1, pos = 0;
FOR(i,0,n){
if (mini == n+1) mini = 1;
should[pos%n] = mini;
pos++,mini++;
}
vector<ll> ans;
vector<vector<ll>> shit;
FOR(i,0,n) shit.push_back({stuff[i], should[i]});
ll cur = n;
sort(shit.begin(), shit.end());
for (auto&i : shit){
while (cur < i[0]) ans.push_back(i[1]),i[1] = ++cur;
}
return ans;
}
ll binpow(ll a, ll b){
//cout << a << " " << b << endl;
if (b==0) return 1;
if (b%2==0) return (binpow(a,b/2)*binpow(a,b/2)) % 1000000009 ;
else return (binpow(a,b-1)*a)%1000000009;
}
ll numseq(vector<ll>&stuff, ll n){
vector<ll> should(n);
ll mini = 10000000000;
ll pos = -1;
vector<ll> shit;
vector<ll> lmfao;
ll cur = n;
ll ans = 1;
for (auto&i : stuff) if (i>n) shit.push_back(i);
ll idkman = shit.size();
sort(shit.begin(), shit.end());
for (auto&i : shit){
lmfao.push_back(i-cur-1);
cur = i;
}
for (auto&i : lmfao){
ans *= binpow(idkman, i);
idkman--;
ans %= 1000000009;
}
if(shit.size()==n) ans *= n, ans%=1000000009;
return ans;
}
int main(){
ll t;
cin >> t;
ll n; cin >> n;
vector<ll> stuff(n);
FOR(i,0,n) cin >> stuff[i];
if (!check_valid(stuff, n)) cout << 1;
else cout << numseq(stuff, n);
}