⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 e.cpp

📁 ACM World Final 2008题目程序代码
💻 CPP
字号:
#include <cstdio>
using namespace std;

int n,l[22],rsize,ans;

struct node
{
	int p,w;
	bool act;
	void operator()(int p_,int w_)
	{
		p=p_;
		w=w_;
		act=true;
		for(int i=1;i<=n;++i)
			if(p_==l[i])act=false;
	}
} r[55];

void read(int& x)
{
	scanf(" ");
	for(x=1;;)
	{
		char c=getchar();
		if(c=='0')x+=x;
		else if(c=='1')x+=x+1;
		else break;
	}
}

void split(int ms)
{
	int maxw=0,b;
	for(int i=1;i<=rsize;++i)if(r[i].act)
		if(r[i].w>maxw)maxw=r[i].w,b=i;
	if(!maxw)
	{
		++ans;
		return;
	}
	if(maxw-1<ms)ms=maxw-1;
	r[b].act=false;
	for(int i=maxw+1>>1;i<=ms;++i)
	{
		r[++rsize](r[b].p<<1,maxw-i);
		r[++rsize](r[b].p<<1^1,i);
		split(maxw-i);
		rsize-=2;
	}
	r[b].act=true;
}

int main()
{
	for(int te=1;scanf("%d",&n),n;++te)
	{
		for(int i=1;i<=n;++i)read(l[i]);
		r[rsize=1](1,100);
		ans=0,split(~0U>>1);
		printf("Case %d: %d\n",te,ans);
	}
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -