Submission #851868

#TimeUsernameProblemLanguageResultExecution timeMemory
851868vjudge1Magneti (COCI21_magneti)C++17
30 / 110
1054 ms600 KiB
//author: #include <bits/stdc++.h> using namespace std; using i64 = long long; #define ONLINE_JUDGE const int MOD = 1e9 + 7; const int MAXN = 1e4 + 5; int fak[MAXN]; int fp(int a, int b) { int res = 1; while(b) { if(b & 1) { res = (1LL * res * a) % MOD; } a = (1LL * a * a) % MOD; b >>= 1; } return res; } int divide(int a) { return fp(a, MOD -2); } int divide(int a, int b) { return (1LL * a * divide(b)) % MOD; } int comb(int n, int r) { if(n < r) return 0; return divide(fak[n], (1LL * fak[r] * fak[n - r]) % MOD); } int cnts[MAXN]; void solve() { int n, l; cin >> n >> l; vector <int> vec(n); for(int &i : vec) cin >> i; sort(vec.begin(), vec.end()); int res = 0; do { int parca = l; for(int i = 0; i +1 < n; i++) { parca -= max(vec[i], vec[i +1]) -1; } res = (0LL + res + comb(parca, n)) % MOD; } while(next_permutation(vec.begin(), vec.end())); for(int &i : vec) cnts[i]++; for(int i = 1; i < MAXN; i++) { res = (1LL * res * fak[cnts[i]]) % MOD; } cout << res; return; } signed main() { #ifndef ONLINE_JUDGE freopen(".in", "r", stdin); freopen(".out", "w", stdout); #endif fak[0] = 1; for(int i = 1; i < MAXN; i++) fak[i] = (1LL * fak[i -1] * i) % MOD; ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int t = 1; //cin >> t; while(t--) solve(); 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...