| Task: | Kaaleppi's puzzle |
| Sender: | Game of Nolife |
| Submission time: | 2016-05-28 15:04:41 +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.05 s | details |
Code
#include <bits/stdc++.h>
#define F first
#define S second
#define X real()
#define Y imag()
using namespace std;
typedef long long ll;
typedef long double ld;
const ll M=1e9+7;
ll f[1010];
ll g[1010];
ll a[1010],b[1010];
const ll i2=5e8+4;
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
a[2]=2;
b[2]=0;
g[2]=2;
for (int i=3;i<=1000;i++) {
a[i]=(b[i-1]*i2)%M;
b[i]=(2*a[i-1]+2*b[i-1])%M;
g[i]=(a[i]+b[i])%M;
}
// for (int i=2;i<=6;i++) cout<<g[i]<<endl;
// cout<<"--"<<endl;
f[1]=1;
f[2]=0;
f[3]=0;
for (ll i=4;i<=1000;i++) {
f[i]=((i-2)*f[i-1])%M;
for (ll k=2;k<i;k++) {
ll hlp=(g[k]*(i-k)-2)%M;
hlp*=f[i-k];
hlp%=M;
f[i]+=hlp;
f[i]%=M;
}
}
// for (int i=1;i<=6;i++) cout<<f[i]<<endl;
int t;
cin>>t;
for (int i=0;i<t;i++) {
int n;
cin>>n;
cout<<f[n]<<"\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 ... |
