记录编号 |
329165 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOIP 2006]2^k进制数 |
最终得分 |
100 |
用户昵称 |
Rapiz |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.630 s |
提交时间 |
2016-10-24 21:31:34 |
内存使用 |
0.08 MiB |
显示代码纯文本
#include<cstdio>
#include<algorithm>
#define file(x) "digital."#x
using std::max;
const int MAXW=4e3+10,MAXK=(1<<9)+10,BASE=1e4;
struct BIG{int a[60],sz;
BIG(){a[sz=1]=1;}
void show(){
printf("%d",a[sz]);
for(int i=sz-1;i;i--)printf("%04d",a[i]);
}
void clear(){
while(sz) a[sz--]=0;
}
}f[MAXK],ans;
void add(BIG& a,const BIG& b){
a.sz=max(a.sz,b.sz);
int g=0;
for(int i=1;i<=a.sz;i++){
a.a[i]+=b.a[i]+g;
g=a.a[i]/BASE;
a.a[i]%=BASE;
}
if(g) a.a[++a.sz]=g;
}
int k,w,m;
struct PROG{
PROG(){
freopen(file(in),"r",stdin);
freopen(file(out),"w",stdout);
scanf("%d%d",&k,&w);
ans.a[1]=0;
m=w%k;
w/=k;
for(int i=2;i<=w;i++){
for(int j=1;j<(1<<k);j++){
f[j].clear();
for(int p=j+1;p<(1<<k);p++) add(f[j],f[p]);
add(ans,f[j]);
}
}
for(int i=1;i<(1<<m);i++) for(int j=i+1;j<(1<<k);j++) add(ans,f[j]);
ans.show();
}}enter;
int main(){
}