Task: | Kaaleppi's puzzle |
Sender: | Noname 01 |
Submission time: | 2016-05-28 14:13:57 +0300 |
Language: | C++ |
Status: | READY |
Result: | ACCEPTED |
test | verdict | time | |
---|---|---|---|
#1 | ACCEPTED | 0.05 s | details |
#2 | ACCEPTED | 0.29 s | details |
#3 | ACCEPTED | 0.10 s | details |
Code
// NONAME-01#include <bits/stdc++.h>using namespace std;long long p = 1000000007;int n;long long dp[1011][2];long long C[1011][1011];long long F[1011];long long p2[1011];void Fill() {int i, j;C[0][0] =1;for (i = 1; i <= 1000; i++) {C[i][0] = 1;for (j = 1; j <= i; j++) {C[i][j] = ( C[i-1][j-1] + C[i-1][j] ) % p;}}F[0] = F[1] = 1;for (i = 2; i <= 1000; i++) {F[i] = (i * F[i-1]) % p;}p2[0] = 1;for (i = 1; i <= 1000; i++)p2[i] = (2 * p2[i-1]) % p;}long long FF(int n, int i, int j) {return (C[i-1][i-j] * C[n-i][j]) % p; // put i conflicts in j bins;}void Load(){cin >> n;}void Solve(){long long ans;int i, j;long long cur;ans = F[n] % p;for (i = 1; i <= n-1; i++) {for (j = 1; j <= i && j+i <= n; j++){cur = p2[j];cur = (cur * F[n-i]) % p;cur = (cur * FF(n, i, j)) % p;if (i % 2 == 0)ans = (ans+cur) % p;else ans = (ans-cur+p) % p;}}cout << ans << "\n";}int main() {Fill();memset(dp, -1, sizeof(dp));ios_base::sync_with_stdio(0);cin.tie(0);int nt, tt;cin >> nt;for (tt = 0; tt < nt; tt++) {Load();Solve();}return 0;}
Test details
Test 1
Verdict: ACCEPTED
input |
---|
20 1 2 3 4 ... |
correct output |
---|
1 0 0 2 14 ... |
user output |
---|
1 0 0 2 14 ... |
Test 2
Verdict: ACCEPTED
input |
---|
20 981 982 983 984 ... |
correct output |
---|
436438246 92806357 21003215 151460560 326076265 ... |
user output |
---|
436438246 92806357 21003215 151460560 326076265 ... |
Test 3
Verdict: ACCEPTED
input |
---|
20 352 478 99 92 ... |
correct output |
---|
552481822 246955132 94569313 829032275 94621650 ... |
user output |
---|
552481822 246955132 94569313 829032275 94621650 ... |