UVA 565 565 Pizza Anyone? (深搜 +位运算)
| Pizza Anyone? |
You are responsible for ordering a large pizza for you and your friends. Each of them has told you what he wants on a pizza and what he does not; of course they all understand that since there is only going to be one pizza, no one is likely to have all their requirements satisfied. Can you order a pizza that will satisfy at least one request from all your friends?
The pizza parlor you are calling offers the following pizza toppings; you can include or omit any of them in a pizza:
| Input Code | Topping |
| A | Anchovies |
| B | Black Olives |
| C | Canadian Bacon |
| D | Diced Garlic |
| E | Extra Cheese |
| F | Fresh Broccoli |
| G | Green Peppers |
| H | Ham |
| I | Italian Sausage |
| J | Jalapeno Peppers |
| K | Kielbasa |
| L | Lean Ground Beef |
| M | Mushrooms |
| N | Nonfat Feta Cheese |
| O | Onions |
| P | Pepperoni |
Your friends provide you with a line of text that describes their pizza preferences. For example, the line
+O-H+P;
reveals that someone will accept a pizza with onion, or without ham, or with pepperoni, and the line
-E-I-D+A+J;
indicates that someone else will accept a pizza that omits extra cheese, or Italian sausage, or diced garlic, or that includes anchovies or jalapenos.
Input
The input consists of a series of pizza constraints.
A pizza constraint is a list of 1 to 12 topping constraint lists each on a line by itself followed by a period on a line by itself.
A topping constraint list is a series of topping requests terminated by a single semicolon.
An topping request is a sign character (+/-) and then an uppercase letter from A to P.
Output
For each pizza constraint, provide a description of a pizza that satisfies it. A description is the string `` Toppings: " in columns 1 through 10 and then a series of letters, in alphabetical order, listing the toppings on the pizza. So, a pizza with onion, anchovies, fresh broccoli and Canadian bacon would be described by:
Toppings: ACFO
If no combination toppings can be found which satisfies at least one request of every person, your program should print the string
No pizza can satisfy these requests.
on a line by itself starting in column 1.
Sample Input
+A+B+C+D-E-F-G-H;
-A-B+C+D-E-F+G+H;
-A+B-C+D-E+F-G+H;
.
+A+B+C+D;
+E+F+F+H;
+A+B-G;
+O+J-F;
+H+I+C;
+P;
+O+M+L;
+M-L+P;
.
+A+B+C+D;
+E+F+F+H;
+A+B-G;
+P-O;
+O+J-F;
+H+I+C;
+P;
+O;
+O+M+L;
-O-P;
+M-L+P;
.
Sample Output
Toppings:
Toppings: CELP
No pizza can satisfy these requests.
题意:一个披萨有16种配料。现在有几个人要定一份披萨。每个人都有一定需求,+代表要哪种配料,-代表不要。
要找出一种披萨。来满足所有人至少一个需求。。如果找不到就输出No pizza can satisfy these requests.
思路:一共16种配料。选与不选每种配料2种选择,一共就是2^16种情况。暴力枚举。。结果超时了。。 因为每种披萨都要进行判断。判断的过程算进去就超时了。。没想出比较好的方法。。看到别人用位运算。。自己也试了下。结果就过了。。不过跑了500多MS。。不知道那些0.00几ms的大神怎么做的。。
位运算:把每个人需要与不需要,存成一个16位2进制数。然后在从0枚举到2 ^16 - 1代表每种披萨。如果有满足条件
他们的或运算会>0。。(关于位运算。稍微看下就能明白的)。。。然后就枚举直到有一种披萨符合条件。把该二进制数转换成相应披萨的字母输出。如果没有。就输出No pizza can satisfy these requests.
#include <stdio.h>
#include <string.h> struct Q
{
int yes;
int no;
} q[10005]; int num = 0;
int sta;
int out[20];
char str[105]; int main()
{
while (gets(str) != NULL)
{
if (str[0] == '.')
{
for (sta = 0; sta < (1 << 16); sta ++)
{
int i;
for (i = 0; i < num; i ++)
{
if ((q[i].yes & sta) || (q[i].no & (~sta)))
continue;
else
break;
}
if (i == num)
break;
}
int nnum = 0;
for (int i = 0; i < 16; i ++)
{
if (sta & (1 << i))
out[nnum ++] = i + 'A';
}
if (sta == (1 << 16))
printf("No pizza can satisfy these requests.\n");
else
{
printf("Toppings: ");
for (int i = 0; i < nnum; i ++)
printf("%c", out[i]);
printf("\n");
}
memset(q, 0, sizeof(q));
memset(out, 0, sizeof(out));
num = 0;
continue;
}
for (int i = 0; str[i] != ';'; i += 2)
{
if (str[i] == '+')
q[num].yes |= (1 << (str[i + 1] - 'A'));
if (str[i] == '-')
q[num].no |= (1 << (str[i + 1] - 'A'));
}
num ++;
}
return 0;
}
UVA 565 565 Pizza Anyone? (深搜 +位运算)的更多相关文章
- UVA 10160 Servicing Stations(深搜 + 剪枝)
Problem D: Servicing stations A company offers personal computers for sale in N towns (3 <= N < ...
- UVA 165 Stamps (DFS深搜回溯)
Stamps The government of Nova Mareterrania requires that various legal documents have stamps attac ...
- UVa 1103 Ancient Messages(二重深搜)
In order to understand early civilizations, archaeologists often study texts written in ancient lang ...
- 模拟赛T5 : domino ——深搜+剪枝+位运算优化
这道题涉及的知识点有点多... 所以还是比较有意思的. domino 描述 迈克生日那天收到一张 N*N 的表格(1 ≤ N ≤ 2000),每个格子里有一个非 负整数(整数范围 0~1000),迈克 ...
- hdu 5648 DZY Loves Math 组合数+深搜(子集法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5648 题意:给定n,m(1<= n,m <= 15,000),求Σgcd(i|j,i&am ...
- TOJ 4976: 新生数(深搜)
传送门:http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=4976 时间限制(普通/Java): ...
- 天梯赛 L2-20 功夫传人 (深搜)
一门武功能否传承久远并被发扬光大,是要看缘分的.一般来说,师傅传授给徒弟的武功总要打个折扣,于是越往后传,弟子们的功夫就越弱-- 直到某一支的某一代突然出现一个天分特别高的弟子(或者是吃到了灵丹.挖到 ...
- hdu 1026:Ignatius and the Princess I(优先队列 + bfs广搜。ps:广搜AC,深搜超时,求助攻!)
Ignatius and the Princess I Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (J ...
- bzoj 1085骑士精神 迭代深搜
题目传送门 题目大意:给出一幅棋盘,问能否复原,中文题面,不做解释. 思路:第一次写迭代深搜的题目,这道题还是挺经典的.这道题的状态很明显的每多搜一层就是多八倍,非常的多,而且又是t组输入,所以必定有 ...
随机推荐
- Java字符串排序中文+数字
编写日期: 2013年9月15日 另一中解法:点击查看 解决思路: 在Java中,排序需要复写的是 equals 方法 和 Comparable<T> 接口 的public int com ...
- BZOJ 4177: Mike的农场( 最小割 )
显然是最小割... 对于规律(i, j, k) i,j 互相连边, 容量为k 对于规则(S, a, b) 新建一个点x, x与S中每个点连一条弧, 容量+∞, 然后再根据a决定x与源点或汇点连边. 跑 ...
- 使用contentprovider实现的日记(转)
目录结构: MyDiaryActivity.java package com.zhang.myDiary; import com.zhang.myDiary.DiaryColumn.DiaryClmn ...
- 06-OC分类、协议、ARC
目录: 一.分类 二.扩展 三.协议 四.内存管理ARC 回到顶部 一.分类 1 分类就是类的补充和扩展,本质上是类的一部分,把一个类分成若干部分,每个部分就是分类. 2 语法 * 文件中的语法@in ...
- 演练5-5:Contoso大学校园管理系统5
Contoso University示例网站演示如何使用Entity Framework 5创建ASP.NET MVC 4应用程序. Entity Framework有三种处理数据的方式: Data ...
- Android项目实战手机安全卫士(02)
目录 项目结构图 源代码 运行结果 项目源代码 项目结构图 源代码 清单 01. SplashActivity.java package com.coderdream.mobilesafe.acti ...
- JVM调优总结(五)-分代垃圾回收详述1
为什么要分代 分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的.因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率. 在Java程序运行的过程中,会产生大量的对象, ...
- Solr基础理论与维护管理快速上手(含查询参数说明)
1. solr基础 因为 Solr 包装并扩展了 Lucene,所以它们使用很多相同的术语.更重要的是,Solr 创建的索引与 Lucene 搜索引擎库完全兼容.通过对 Solr 进行适当的配置,某些 ...
- Ext的异步请求(二级级联动态加载下拉列表)
页面: <tr> <td class="label" width="300" >作业计划项模板</td> <td> ...
- ios网络学习------1get post异步请求
网络请求的步骤: get请求: #pragma mark - 这是私有方法,尽量不要再方法中直接使用属性,由于一般来说属性都是和界面关联的,我们能够通过參数的方式来使用属性 #pragma mark ...