博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj1483 It's not a Bug, It's a Feature!
阅读量:7219 次
发布时间:2019-06-29

本文共 4568 字,大约阅读时间需要 15 分钟。

It's not a Bug, It's a Feature!
Time Limit: 5000MS   Memory Limit: 30000K
Total Submissions: 1231   Accepted: 466

Description

It is a curious fact that consumers buying a new software product generally do not expect the software to be bug-free. Can you imagine buying a car whose steering wheel only turns to the right? Or a CD-player that plays only CDs with country music on them? Probably not. But for software systems it seems to be acceptable if they do not perform as they should do. In fact, many software companies have adopted the habit of sending out patches to fix bugs every few weeks after a new product is released (and even charging money for the patches).
Tinyware Inc. is one of those companies. After releasing a new word processing software this summer, they have been producing patches ever since. Only this weekend they have realized a big problem with the patches they released. While all patches fix some bugs, they often rely on other bugs to be present to be installed. This happens because to fix one bug, the patches exploit the special behavior of the program due to another bug.
More formally, the situation looks like this. Tinyware has found a total of n bugs B = {b1, b2, ..., bn} in their software. And they have released m patches p1, p2, ..., pm. To apply patch pi to the software, the bugs Bi
+ in B have to be present in the software, and the bugs Bi
- in B must be absent (of course Bi
+ ∩ Bi
- = Φ). The patch then fixes the bugs Fi
- in B (if they have been present) and introduces the new bugs Fi
+ in B (where, again, Fi
+ ∩ Fi
- = Φ).
Tinyware's problem is a simple one. Given the original version of their software, which contains all the bugs in B, it is possible to apply a sequence of patches to the software which results in a bug- free version of the software? And if so, assuming that every patch takes a certain time to apply, how long does the fastest sequence take?

Input

The input contains several product descriptions. Each description starts with a line containing two integers n and m, the number of bugs and patches, respectively. These values satisfy 1 <= n <= 20 and 1 <= m <= 100. This is followed by m lines describing the m patches in order. Each line contains an integer, the time in seconds it takes to apply the patch, and two strings of n characters each.
The first of these strings describes the bugs that have to be present or absent before the patch can be applied. The i-th position of that string is a ``+'' if bug bi has to be present, a ``-'' if bug bi has to be absent, and a `` 0'' if it doesn't matter whether the bug is present or not.
The second string describes which bugs are fixed and introduced by the patch. The i-th position of that string is a ``+'' if bug bi is introduced by the patch, a ``-'' if bug bi is removed by the patch (if it was present), and a ``0'' if bug bi is not affected by the patch (if it was present before, it still is, if it wasn't, is still isn't).
The input is terminated by a description starting with n = m = 0. This test case should not be processed.

Output

For each product description first output the number of the product. Then output whether there is a sequence of patches that removes all bugs from a product that has all n bugs. Note that in such a sequence a patch may be used multiple times. If there is such a sequence, output the time taken by the fastest sequence in the format shown in the sample output. If there is no such sequence, output ``Bugs cannot be fixed.''.
Print a blank line after each test case.

Sample Input

3 31 000 00-1 00- 0-+2 0-- -++4 17 0-0+ ----0 0

Sample Output

Product 1Fastest sequence takes 8 seconds.Product 2Bugs cannot be fixed.

Source

好坑的一题 ,刚开始没有考虑到不同走的方法是不等价的,所以错了很多次,用个优先队列就可以了,直接上代码,但不知道,那些0m的是怎么搞的,我把能优化的都优化了啊,像什么二进制,我估计还有什么好的优化方法吧,等以后再看看
#include
#include
#include
#include
using namespace std;int n,m,time[200],before[2][200],after[2][200],visit[2000000];struct bugtree{int time ,bugnum;bool operator <(const bugtree a)const //重载比较函数,为下面队作准备,也可以在外面{ if(time>a.time)//这里是大于号,要小心这里和下面优先队列的排列顺序是有很大关系的! return true; else return false ;}};bool bugcan(int i,bugtree f)//判断是否符合第m种的操作{ int ignore; ignore=f.bugnum&(~before[0][i]);//把不用考虑的全部置成0其它的不变// printf("%d ignore\n",ignore); if(ignore==before[1][i])//如果在不能有的位置上有1,就要返回假 return true; return false ;}int bfs(){ int i; bugtree temp,ss; priority_queue < bugtree > q; memset(visit,-1,sizeof(visit)); while(!q.empty())//清空 q.pop(); temp.time=0; temp.bugnum=(1<

 

转载地址:http://tptym.baihongyu.com/

你可能感兴趣的文章
Robotics ToolBox机械臂仿真
查看>>
linux添加环境变量
查看>>
【uva 1312】Cricket Field(算法效率--技巧枚举)
查看>>
VS2017 MVC项目,新建控制器提示未能加载文件或程序集“Dapper.Contrib解决方法
查看>>
【ora-err】ORA-03113: end-of-file on communication channel
查看>>
00.索引-综述
查看>>
strcpy
查看>>
AC3 Rematrix
查看>>
C#之Windows Form Application与attribute
查看>>
函数与指针分析实例
查看>>
爬虫:pycurl模块的使用说明
查看>>
Halcon算子翻译——try
查看>>
Win732位安装PostgreSQL9
查看>>
Ext JS4学习笔记1——环境的搭建
查看>>
.net MVC3实现不同的角色用不同的登录页面
查看>>
Scala学习笔记-12
查看>>
eq与gt的妙用
查看>>
哈哈哈
查看>>
projectEuler pro10
查看>>
聚焦“云开发圆桌论坛”,大前端Serverless大佬们释放了这些讯号!
查看>>