比赛 20111021 评测结果 AAAAAAAAAA
题目名称 掷骰子 最终得分 100
用户昵称 苏轼 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2011-10-21 20:46:45
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
int number,m,n,q[1512770][9],ji=0,ji1=0,c=0,f[20][9],used[9]={0},answer=0;
bool check(int x);
void di(int x);
int main()
{
	freopen ("cowyotz.in","r",stdin);
	freopen ("cowyotz.out","w",stdout);
	scanf("%d%d%d\n",&number,&m,&n);
	di(1);
	for (int i=0;i<n;i++)
	{
		char s[50];
		cin>>s;
		int lq;
		lq=strlen(s);
		int j=0;
		while (j<lq)
		{
			int a,b;
			a=s[j]-'0';
			b=s[j+2]-'0';
			f[ji1][b]=a;
			if (s[j+3]=='+')
			{
				j+=4;
			}
			else
			{
				break;
			}
		}
		ji1++;
	}
	for (int o=0;o<ji;o++)
	{
		int u[9]={0};
		for (int i=1;i<=number;i++)
		{
			u[q[o][i]]++;
		}
		for (int i=1;i<=m;i++)
		{
			q[o][i]=u[i];
		}
		if (check(o))
		{
			answer++;
		}
	}
	printf("%d",answer);
	return 0;
}
void di(int x)
{
	q[ji][c]=x;
	if (c==number)
	{
		ji++;
		for (int i=1;i<=number;i++)
		{
			q[ji][i]=q[ji-1][i];
		}
		
	}
	else
	{
		for (int i=1;i<=m;i++)
		{
			c++;
			di(i);
			c--;
		}
	}
}
bool check(int x)
{
	int p=0;
	for (int j=0;j<n;j++)
	{
		p=0;
		for (int i=1;i<=m;i++)
		{
			if (f[j][i]==0)
			{
				continue;
			}
			if (q[x][i]<f[j][i])
			{
				p++;
				break;
			}
		}
		if (p==0)
		{
			return true;
		}
	}
	return false;
}