记录编号 |
313981 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOI 2001]陨石的秘密 |
最终得分 |
100 |
用户昵称 |
Sky_miner |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.102 s |
提交时间 |
2016-10-02 15:39:50 |
内存使用 |
0.50 MiB |
显示代码纯文本
#include <cstdio>
#include <cstdlib>
using namespace std;
inline void read(int &x){
x=0;char ch;bool flag = false;
while(ch=getchar(),ch<'!');if(ch == '-') ch=getchar(),flag = true;
while(x=10*x+ch-'0',ch=getchar(),ch>'!');if(flag) x=-x;
}
inline int cat_min(const int &a,const int &b){return a<b ? a:b;}
inline int cat_max(const int &a,const int &b){return a>b ? a:b;}
const int MOD = 11380;
typedef long long ll;
int L1,L2,L3,D;
int f[32][12][12][12];
void Solve(int d,int l1,int l2,int l3){
for(int i = 0;i < l1;++i){
for(int j = 0;j <= l2;++j){
for(int k = 0;k <= l3; ++k){
(f[d][l1][l2][l3] += (f[d-1][i][j][k]*f[d][l1-i-1][l2-j][l3-k]) % MOD) %= MOD;
}
}
}
for(int j = 0;j < l2; ++j){
for(int k = 0;k <= l3; ++k){
(f[d][l1][l2][l3] +=(f[d-1][0][j][k]*f[d][l1][l2-j-1][l3-k])%MOD) %= MOD;
}
}
for(int k = 0;k < l3; ++k){
(f[d][l1][l2][l3] += (f[d-1][0][0][k]*f[d][l1][l2][l3-k-1])%MOD) %= MOD;
}
}
int main(){
freopen("secret.in","r",stdin);
freopen("secret.out","w",stdout);
read(L1);read(L2);read(L3);read(D);
for(int i = 0;i <= D; ++i) f[i][0][0][0]=1;
for(int i = 1;i <= D; ++i){
for(int j = 0;j <= L1; ++j){
for(int k = 0;k <= L2; ++k){
for(int l = 0;l <= L3; ++l){
Solve(i,j,k,l);
}
}
}
}
if(D) printf("%d",((f[D][L1][L2][L3]-f[D-1][L1][L2][L3])%MOD+MOD)%MOD);
else printf("%d",f[D][L1][L2][L3]);
fclose(stdin);fclose(stdout);
return 0;
}