这个题目没啥好讲的,直接暴力枚举即可。
主要是弄清怎样就是满足条件:
他想要的存在或不想要的不存在!!!
Code↓:
#include<string>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define RG register
#define IL inline
#define LL long long
#define DB double
using namespace std;
const int N=1100;
char str[N][N];
int cnt,ans,Max=(1<<16)-1;
IL int check(int state,int i) {
RG int j,len;
len=strlen(str[i]);
for(j=0;j<len-1;j+=2)
if(str[i][j]=='+') {
if((state>>(str[i][j+1]-'A'))&1) return 1;
}
else if(!((state>>(str[i][j+1]-'A'))&1)) return 1;
return 0;
}
int main()
{
RG int i,j,flag;
while(scanf("%s",str[++cnt])!=EOF) {
if(str[cnt][0]=='.') {
for(i=0,ans=-1;i<=Max;++i) {
for(j=1,flag=0;j<cnt&&!flag;++j)
if(!check(i,j)) flag=1;
if(!flag) {ans=i;break;}
}
if(ans==-1) puts("No pizza can satisfy these requests.");
else {
printf("Toppings: ");
for(i=1;ans;ans>>=1,++i)
if(ans&1) printf("%c",i+'A'-1);
putchar('
');
}
cnt=0;
}
}
return 0;
}