제출 #1325958

#제출 시각아이디문제언어결과실행 시간메모리
1325958crispxx곤돌라 (IOI14_gondola)C++20
65 / 100
35 ms4972 KiB
#include "gondola.h" #include <bits/stdc++.h> using namespace std; using ll = long long; const int mod = 1e9 + 9; int mul(int a, int b) { return a * 1LL * b % mod; } int binpow(int a, int b) { int res = 1; while(b > 0) { if(b & 1) res = mul(res, a); a = mul(a, a); b >>= 1; } return res; } int valid(int n, int s[]) { set<int> st(s, s + n); if( (int)st.size() != n ) return false; st.clear(); for(int i = 0; i < n; i++) { s[i]--; if(s[i] < n) { st.emplace((i - s[i] + n) % n); } } return (int)st.size() <= 1; } //---------------------- int replacement(int n, int s[], int r[]) { return -1; } //---------------------- int countReplacement(int n, int s[]) { if( !valid(n, s) ) return 0; vector<int> b; for(int i = 0; i < n; i++) { if(s[i] >= n) { b.push_back(s[i]); } } b.push_back(n - 1); sort(b.begin(), b.end()); // for(auto &x : b) cout << x + 1 << ' '; // cout << '\n'; int ans = 1; for(int i = 1; i < (int)b.size(); i++) { int aval = b.size() - i; int k = b[i] - b[i - 1] - 1; // cout << aval << ' ' << k << '\n'; ans = mul( ans, binpow(aval, k) ); } if( (int)b.size() == n + 1 ) { ans = mul(ans, n); } 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...