Best solutions for Problem 4359
Rank | Author | Exe. Time | Exe. Memory | Code Len. | Language | Date |
1 | ╮(╯▽╰)╭ | 593MS | 2392K | 2992B | C++ | 2012-08-10 16:57:29 |
2 | hk | 765MS | 2516K | 1031B | C++ | 2012-08-10 16:02:22 |
3 | y. | 765MS | 3644K | 2182B | G++ | 2012-08-09 23:37:07 |
4 | Sure | 796MS | 3320K | 1779B | C++ | 2012-08-10 08:08:18 |
5 | fancl20 | 859MS | 2404K | 1049B | C++ | 2012-08-10 13:14:53 |
6 | 2010120422 | 859MS | 3536K | 1659B | C++ | 2012-08-09 19:33:38 |
7 | tangjiehui | 1015MS | 3520K | 1456B | C++ | 2012-08-09 20:02:24 |
8 | S031002415 | 1078MS | 4276K | 2040B | G++ | 2012-08-09 20:01:06 |
9 | Geners | 1078MS | 4284K | 2814B | G++ | 2012-08-09 18:27:36 |
10 | xym2010 | 1125MS | 4076K | 2320B | G++ | 2012-08-09 17:26:43 |
#include<iostream>
#include<vector>
#include<algorithm>
#include<cstdio>
#include<queue>
#include<stack>
#include<string>
#include<map>
#include<set>
#include<cmath>
#include<cassert>
#include<cstring>
#include<iomanip>
using namespace std;
#ifdef _WIN32
#define i64 __int64
#define out64 "%I64d\n"
#define in64 "%I64d"
#else
#define i64 long long
#define out64 "%lld\n"
#define in64 "%lld"
#endif
/************ for topcoder by zz1215 *******************/
#define FOR(i,a,b) for( int i = (a) ; i <= (b) ; i ++)
#define FFF(i,a) for( int i = 0 ; i < (a) ; i ++)
#define FFD(i,a,b) for( int i = (a) ; i >= (b) ; i --)
#define S64(a) scanf(in64,&a)
#define SS(a) scanf("%d",&a)
#define LL(a) ((a)<<1)
#define RR(a) (((a)<<1)+1)
#define pb push_back
#define CL(Q) while(!Q.empty())Q.pop()
#define MM(name,what) memset(name,what,sizeof(name))
#define MAX(a,b) ((a)>(b)?(a):(b))
#define MIN(a,b) ((a)<(b)?(a):(b))
#define read freopen("out.txt","r",stdin)
#define write freopen("zz.txt","w",stdout)
const int inf = 0x3f3f3f3f;
const i64 inf64 = 0x3f3f3f3f3f3f3f3fLL;
const double oo = 10e9;
const double eps = 10e-9;
const double pi = acos(-1.0);
const int maxn = 365;
const int mod = 1000000007;
i64 c[maxn][maxn];
i64 f[maxn][maxn];
void init()
{
MM(c,0);
for(int i=0;i<maxn;i++)
{
c[i][0]=1;
c[i][i]=1;
}
for(int i=2;i<maxn;i++)
{
for(int j=1;j<i;j++)
{
c[i][j]=c[i-1][j]+c[i-1][j-1];
c[i][j]%=mod;
}
}
return ;
}
void start()
{
MM(f,0);
f[0][0]=1;
f[1][1]=1;
i64 temp;
for(int i=2;i<maxn;i++)
{
f[1][i]=f[1][1];
f[0][i]=f[0][0];
}
for(int i=2;i<maxn;i++)
{
for(int j=1;j<=i;j++)
{
f[i][j]+=f[i-1][j-1]*2;
f[i][j]%=mod;
for(int k=1;k<=i-2;k++)
{
temp=f[k][j-1]*f[i-k-1][j-1];
temp%=mod;
f[i][j]+=c[i-2][k]*temp;
f[i][j]%=mod;
}
f[i][j]*=c[i][1];
f[i][j]%=mod;
}
for(int j=i+1;j<maxn;j++)
{
f[i][j]=f[i][i];
}
}
return ;
}
int n,d;
int main()
{
init();
start();
int T;
i64 ans;
cin>>T;
for(int tt=1;tt<=T;tt++)
{
cin>>n>>d;
ans=f[n][d]-f[n][d-1];
while(ans<0) ans+=mod;
ans%=mod;
cout<<"Case #"<<tt<<": "<<ans<<endl;
}
return 0;
}