Tautology(poj3295)(DFS)
本题中最多5个命题变项:p,q,r,s,t
每个有0,1两种取值,所以总共32种情况,分别枚举即可。
对于每种情况,计算表达式的值,如果有结果为0的则输出not
难点在于如何计算表达式的值,我们采用递归的方法,把表达式分为一或两个子表达式,并把参数end(本表达式的结束位置)传给上一层,一遍上一层获取第二个子表达式的起始位置。最后通过两个子表达式的结束位置,得到整个表达式的结束位置。
end是本表达式的最后一位的下标,即本表达式的长度减一。
所以 end = 2 + end1 + end2;
1 #include <iostream> 2 #include <cstdio> 3 #include <string> 4 #include <cstdlib> 5 using namespace std; 6 7 string p; 8 bool v[5]; 9 10 bool getValue(string p, int &end) 11 { 12 bool a, b; 13 int end1, end2; 14 15 if (p[0] >= 'p') 16 { 17 end = 0; 18 return v[p[0] - 'p']; 19 } 20 if (p[0] == 'N') 21 { 22 a = getValue(p.substr(1, p.length() - 1), end1); 23 end = end1 + 1; 24 return !a; 25 } 26 a = getValue(p.substr(1, p.length() - 1), end1); 27 b = getValue(p.substr(end1 + 2, p.length() - 1), end2); 28 end = 2 + end1 + end2; 29 switch (p[0]) 30 { 31 case 'K': 32 return a && b; 33 case 'A': 34 return a || b; 35 case 'C': 36 return !a || b; 37 case 'E': 38 return !(a ^ b); 39 } 40 return 0; 41 } 42 43 int main() 44 { 45 bool ok; 46 47 while (getline(cin, p) && p[0] != '0') 48 { 49 ok = true; 50 for (int i = 0; i < 32; i++) 51 { 52 for (int j = 0; j < 5; j++) 53 v[j] = (i >> j) % 2; 54 int x; 55 if (!getValue(p, x)) 56 { 57 ok = false; 58 break; 59 } 60 } 61 if (ok) 62 cout << "tautology" << endl; 63 else 64 cout << "not" << endl; 65 } 66 return 0; 67 }
转自http://www.cnblogs.com/rainydays/archive/2011/02/01/1948678.html
转载于:https://www.cnblogs.com/gj-Acit/archive/2013/01/30/2883618.html
Tautology(poj3295)(DFS)相关推荐
- 问题 B: 数独(九宫格经典问题+dfs)
问题 B: 数独(九宫格经典问题+dfs) 题目描述 这个游戏只有一个规则: 将格子填满使得每一行,每一列,和每一个小的九宫格,恰好包含1-9这9个数字 正是由于规则简单而又变化多端,数独一时间风靡全 ...
- Wikioi 2822爱在心中(强连通缩点+dfs)
2822 爱在心中(强连通缩点+遍历) 2822 爱在心中 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description " ...
- 近期题目整理2.0(递归和简单dfs)
1.HDU-1207 题目描述: 经典的汉诺塔问题经常作为一个递归的经典例题存在.可能有人并不知道汉诺塔问题的典故.汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从下往 ...
- bzoj3252攻略(线段树+dfs序)或者(树链剖分+dfs)
3252: 攻略 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1341 Solved: 642 [Submit][Status][Discuss] ...
- [COCI2017-2018#5] Pictionary(并查集+dfs)
贼ex的一道,卡了本仙女整整7个小时orz 思路容易理解,but码力very重要orz 我愿意花五毛钱提升我的码力,换个脑子也行,不换脸这张脸生得俊俏 luogu传送door 题目 在宇宙一个不为人知 ...
- LeetCode 1020. 飞地的数量(图的BFS/DFS)
文章目录 1. 题目 2. 解题 2.1 BFS 2.2 DFS 1. 题目 给出一个二维数组 A,每个单元格为 0(代表海)或 1(代表陆地). 移动是指在陆地上从一个地方走到另一个地方(朝四个方向 ...
- LeetCode 1254. 统计封闭岛屿的数目(图的BFS DFS)
文章目录 1. 题目 2. 解题 2.1 DFS 2.2 BFS 1. 题目 有一个二维矩阵 grid ,每个位置要么是陆地(记号为 0 )要么是水域(记号为 1 ). 我们从一块陆地出发,每次可以往 ...
- LeetCode 695. 岛屿的最大面积(图的BFS/DFS)
文章目录 1. 题目 2. 解题 2.1 BFS广度优先搜索 2.2 DFS深度优先搜索 1. 题目 给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直 ...
- LeetCode 130. 被围绕的区域(图的BFS/DFS)
文章目录 1. 题目 2. 解题 2.1 BFS 2.2 DFS 1. 题目 给定一个二维的矩阵,包含 'X' 和 'O'(字母 O). 找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O' ...
- LeetCode 133. 克隆图(图的BFS/DFS)
1. 题目 给定无向连通图中一个节点的引用,返回该图的深拷贝(克隆).图中的每个节点都包含它的值 val(Int) 和其邻居的列表(list[Node]). class Node {public:in ...
最新文章
- LabVIEW实现PCB电路板元器件匹配定位(实战篇—7)
- 怎么一个好的短信验证码接口接入到自己的企业网站和APP程序当中选择
- 程序员如何让自己的程序少出BUG- [工作]
- 《响应式Web图形设计》一13.2 缩放图像带来的问题
- 利用Matlab设计滤波器(FDAT)
- CodeForces - 1029B.Creating the Contest(最长上升子序列0(n)解法)
- Imagelist 控件
- android 蓝牙耳机 sco,使用Android识别器内置蓝牙耳机
- 《C++ Primer》第五版课后习题解答_第二章(1)(01-08)
- 2017.5.5 小朋友的数字 思考记录
- wsl使用可视化界面_WSL 科学计算〇 | 适合计算化学的环境配置
- 如果你感到ETF内卷了,聪明的你要换条路
- 解决问题“Parsing Data for android-23 failed Unsupported major.minor version 51.0”
- BASE16、BASE32、BASE64编码特征及正则匹配
- hive调优fetch模式抓取,join表测试空key自动转换random,mapreduce动态分区设置
- 【超简便的Python】 提取两个列表的共同元素
- Vue 实现简单的时间轴 时间进度条
- DT(密集轨迹)算法和iDT(改善的密集轨迹)算法
- 机器学习08:最近邻学习
- 工业相机与镜头分辨率的匹配选型
热门文章
- 玫瑰花函数matlab,网上收到的用matlab画玫瑰花的代码怎么不行啊,报告错误,求大神...
- oracle怎么格式化sql语句,Oracle sqlplus格式化数据
- 谷歌发布android+8.2,谷歌Pixel 2代三款新机齐曝光:骁龙835+Android 8.0
- mysql中如何卸载插件_Eclipse中如何卸载插件
- python 代码格式规范脚本_Python编码规范
- 【渝粤教育】国家开放大学2018年春季 0275-22T内科护理学 参考试题
- 【渝粤教育】电大中专电子商务网站建设与维护 (25)作业 题库
- 【渝粤题库】广东开放大学 秘书理论与实务 形成性考核
- 【渝粤题库】广东开放大学 建设监理 形成性考核
- 【渝粤题库】国家开放大学2021春1018国际公法题目