16个披萨配料,选出一种组合满足所有人的需求,当然,如果某个人不喜欢A,结果里不包含A也是满足这个人的.只要答案满足题意既可,答案不唯一,special judge
用位枚举
#include <stdio.h> #include<iostream> #include <string.h> #include<memory.h> using namespace std; const int N = 17; int yes[17] = { 0 }; int no[17] = { 0 }; const string out = "Toppings: "; int total = 0; int main() { char input2[100]; while (gets(input2) != NULL) { if(input2[0] == '.') { int i = 0; for(i = 0; i < (1 << 16); i++) { int k = 0; for(; k < total; k++) { if((yes[k] & i) | (no[k] & (~i))) continue; else break; } if(k == total) break; } if(i == (1 << 16)) { cout << "No pizza can satisfy these requests." << endl; } else { char ss[16]; memset(ss, 0, sizeof(ss)); int index = 0; for(int k = 0; k < 16; k++) { if(i & (1 << k)) ss[index++] = k + 'A'; } cout << out; cout << ss << endl; } memset(yes, 0, sizeof(yes)); memset(no, 0, sizeof(no)); total = 0; } else { for(int i = 0;input2[i]!=';'; i=i+2) { if(input2[i] == '+') { char cc = input2[i+1]; yes[total] = (yes[total]) | (1 << (cc - 'A')); } else { char cc = input2[i+1]; no[total] = (no[total]) | (1 << (cc - 'A')); } } ++total; } } return 0; }