Task: | Kaaleppi's puzzle |
Sender: | Ace of Spades |
Submission time: | 2016-05-28 14:14:36 +0300 |
Language: | C++ |
Status: | READY |
Result: | ACCEPTED |
test | verdict | time | |
---|---|---|---|
#1 | ACCEPTED | 0.06 s | details |
#2 | ACCEPTED | 0.06 s | details |
#3 | ACCEPTED | 0.07 s | details |
Code
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int MN = 1111; const int MOD = 1e9+7; int ans[MN]; ll dp[3][MN][2]; //e, v int main(void) { cin.tie(0); ios_base::sync_with_stdio(false); cout << fixed << setprecision(12); dp[1][0][0] = 1; ans[1] = 1; for(int i = 2; i <= 1111; ++i) { for(int j = 0; j < i; ++j) { dp[2][j+1][1] += 2*dp[1][j][0]; dp[2][j+1][1] %= MOD; if(j > 0) { dp[2][j-1][0] += dp[1][j][0]*j; dp[2][j-1][0] %= MOD; } int q = i-2-j; dp[2][j][0] += q*dp[1][j][0]; dp[2][j][0] %= MOD; if(j > 0) { dp[2][j][1] += dp[1][j][1]; dp[2][j][1] %= MOD; int w = i-1-j; dp[2][j][0] += dp[1][j][1]*w; dp[2][j][0] %= MOD; dp[2][j+1][1] += dp[1][j][1]; dp[2][j+1][1] %= MOD; dp[2][j-1][0] += dp[1][j][1] * (j-1); dp[2][j-1][0] %= MOD; } } for(int j = 0; j < MN; ++j) { for(int k = 0; k < 2; ++k) { dp[1][j][k] = dp[2][j][k]; dp[2][j][k] = 0; } } ans[i] = dp[1][0][0]; } int tt; cin>>tt; for(int i = 0; i < tt; ++i) { int q; cin>>q; cout<<ans[q]<<'\n'; } }
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 ... |