记录编号 329165 评测结果 AAAAAAAAAA
题目名称 [NOIP 2006]2^k进制数 最终得分 100
用户昵称 GravatarRapiz 是否通过 通过
代码语言 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(){
}