/*
A-P共16种要求,每种要求选择或不选择,所以可以枚举16位二进制表示所有的可能
然后对每种可能检测是否符合每个人的要求,定义一个结构体,存储每一个要求需要和不需要的披萨种类
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 10000
typedef struct _case
{
int want;
int dont;
}request;
request req[MAX_SIZE];
int len=0;
char result[MAX_SIZE][100];
int count=0;
int input()
{
int j,want,dont;
char str[100]={0};
len=0;
while(gets(str))
{
want=0;dont=0;
if(str[0]=='.') return 1;
for(j=0; str[j]!= ';' ; j+=2)
if(str[j]=='+')
want|= (1<<(str[j+1]-'A'));
else
dont|= (1<<(str[j+1]-'A'));
req[len].want = want;
req[len].dont = dont;
len++;
}
return 0;
}
int solve()
{
int state,j,i,x=0;
char str[100]={0};
for(state=0; state<(1<<16); state++)
{
for(j=0; j<len; j++)
if( (state&req[j].want) || ( (~state)&req[j].dont) )
continue;
else
break;
if(j==len)
{
strcpy(result[count], "Toppings: ");
for(i=0; i<16; i++)
if( state& (1<<i) )
str[x++] = 'A'+i;
str[x]=0;
strcat(result[count], str);
count++;
return 1;
}
}
strcpy(result[count],"No pizza can satisfy these requests.");
count++;
return 0;
}
void output()
{
int i;
for(i=0; i<count; i++)
printf("%s\n",result[i]);
}
int main()
{
int res=0;freopen("c:\\2.txt","r",stdin);
while(1)
{
res = input();
if(!res) break;
solve();
}
output();
return 0;
}
uva 565 Pizza Anyone?
最新推荐文章于 2019-04-27 14:48:24 发布