POJ3295 Tautology
大概题意:输入为含有p, q, r, s, t代表的 五个逻辑变量及K, A, N, C, E代表的五个基本逻辑连接词的字符串,输出即判断是否为永真式。
思路:参照http://blog.csdn.net/jun_sky/article/details/7002084的思路,即五个变量共2^5种情况(00000-11111),再从字符串尾部开始压栈,
分成三种情况考虑1)逻辑变量直接将值push;2)N就pop一次,push一次;3)其他pop两次再push。
#include <iostream>
#include<string>
#include<stack>
using namespace std;
bool v[32][5];
bool rela(char s,bool n,bool m);
int main()
{string str;int i,j;for(i=0;i<32;i++){int t=i;v[i][0]=t/16;t%=16;v[i][1]=t/8;t%=8;v[i][2]=t/4;t%=4;v[i][3]=t/2;t%=2;v[i][4]=t/1;}/*for(i=0;i<32;i++){for(j=0;j<5;j++)cout<<v[i][j];cout<<endl;}*/while(cin>>str&&str!="0"){for(j=0;j<32;j++){stack <bool> q;for(i=str.length()-1;i>=0;--i){int t=str[i]-'p';bool m,n;if(t>=0&&t<5) {q.push(v[j][t]);}else if(str[i]=='N'){m=q.top();q.pop();q.push(!m);}else{m=q.top();q.pop();n=q.top();q.pop();q.push(rela(str[i],n,m));}// cout<<q.front();}if(!q.top()) break;}if(j==32) cout<<"tautology\n";else cout<<"not\n";}return 0;
}
bool rela(char s,bool n,bool m){if(s=='K') return n*m;if(s=='A') return n+m;if(s=='C') return(!(n*(!m)));if(s=='E') return (n==m);
}
POJ3295 Tautology相关推荐
- 构造法 | 栈 | POJ3295.Tautology
构造法 | 栈 | POJ3295.Tautology Link:Tautology Description WFF 'N PROOF is a logic game played with dice ...
- POJ3295 Tautology
借助的是这位大神的解题报告的写法,不愿多敲了. 大致题意: 输入由p.q.r.s.t.K.A.N.C.E共10个字母组成的逻辑表达式, 其中p.q.r.s.t的值为1(true)或0(false),即 ...
- Tautology(poj3295)(DFS)
本题中最多5个命题变项:p,q,r,s,t 每个有0,1两种取值,所以总共32种情况,分别枚举即可. 对于每种情况,计算表达式的值,如果有结果为0的则输出not 难点在于如何计算表达式的值,我们采用递 ...
- poj 3295 Tautology(经典构造算法题)
思路:1)使用递归模拟,用备忘录优化,否则超时 另外:学到了一个不用递归即可枚举构造0-1序列的方法 for(i=0;i<32;i++)for(j=0;j<5;j++)arr[j]=(i& ...
- E - Tautology(永真式)
题目描述 WFF 'N PROOF is a logic game played with dice. Each die has six faces representing some subset ...
- 【poj 3295】Tautology (栈)
做法:穷举五个变量的可能取值.对于每种情况,建立一个栈,从右往左遍历字符串,字符代表数字时入栈,代表运算符时取出一定量的数字,运算后把结果压入栈.最后剩下的就是这个运算式的结果了. 在所有的取值下结果 ...
- POJ 3295: Tautology 递归的永真式
原题链接:Tautology 题目大意:p.q.r.s.t是逻辑变量,K.A.N.C.E是逻辑操作,相应的真值表已经给出.要求给定一个逻辑表达式,判断其是否为永真式,即无论其中的逻辑变量取值如何,其结 ...
- Competitive Programming 3题解
题目一览: Competitive Programming 3: The New Lower Bound of Programming Contests(1) Competitive Programm ...
- 做acm 需要学的算法
做acm 需要学的算法 转一个搞ACM需要的掌握的算法. 要注意,ACM的竞赛性强,因此自己应该和自己的实际应用联系起来. 适合自己的才是好的,有的人不适合搞算法,喜欢系统架构,因此不要看到别人什 ...
- acm经典题Mark
著名的北邮ACM推荐50题 POJ推荐50题 1.标记"难"和"稍难"的题目可以看看,思考一下,不做要求,当然有能力的同学可以直接切掉. 2.标记为A and ...
最新文章
- OpenGL clipdistance剪辑距离实例
- Linux防火墙iptables基础详解
- windowsCE异常和中断服务程序初探(=)
- 表单验证的初步实现和省市级联
- (篇七)输入任意个数字,输出最大值最小值,且进行排序排序
- pyspider 数据存储到mongoDB中
- STL中常用容器的数据结构与底层实现
- oracle数据库驱动下载(ojdbc)
- 数字图像处理入门(冈萨雷斯第三版)
- 上海亚商投顾:三大指数小幅下跌 两市成交金额创年内新低
- 软件质量-知识点整理
- 图像处理——插值算法
- Testin云测:深耕企业应用服务
- 搜索引擎Autonomy
- 搜索引擎SEO 入门学习摘要笔记
- 郭霖的LitePal版本历程
- html中图像标记的属性,HTML中的图象标签属性
- TSP问题——GA(遗传算法)解法(附源代码)
- 打开idea的svn项目弹出Action not found:Subversion.Add提示解决办法
- 联想创投创业者巅峰对话 杨元庆:企业都会经历螺旋式上升
热门文章
- NAXX Central District 2 Kel‘Thuzad
- 华为/华三交换机配置NTP时钟同步
- 你有哪些“相见恨晚”的UE4学习资料?
- vs code php终端输出中文乱码及环境配置解决办法
- 计算机数据备份到u盘,技术给你说Win10系统怎么把数据备份到U盘的完全处理手段...
- Xdebug、Zend bugger与Zend Optmizer不兼容问题
- css 动效彩旗飘扬
- 关于身份证加密展示处理以及update table set cou=(select from ..)
- HDFS文件访问权限
- Nature:细菌增长和扩张的平衡机制