大概题意:输入为含有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相关推荐

  1. 构造法 | 栈 | POJ3295.Tautology

    构造法 | 栈 | POJ3295.Tautology Link:Tautology Description WFF 'N PROOF is a logic game played with dice ...

  2. POJ3295 Tautology

    借助的是这位大神的解题报告的写法,不愿多敲了. 大致题意: 输入由p.q.r.s.t.K.A.N.C.E共10个字母组成的逻辑表达式, 其中p.q.r.s.t的值为1(true)或0(false),即 ...

  3. Tautology(poj3295)(DFS)

    本题中最多5个命题变项:p,q,r,s,t 每个有0,1两种取值,所以总共32种情况,分别枚举即可. 对于每种情况,计算表达式的值,如果有结果为0的则输出not 难点在于如何计算表达式的值,我们采用递 ...

  4. poj 3295 Tautology(经典构造算法题)

    思路:1)使用递归模拟,用备忘录优化,否则超时 另外:学到了一个不用递归即可枚举构造0-1序列的方法 for(i=0;i<32;i++)for(j=0;j<5;j++)arr[j]=(i& ...

  5. E - Tautology(永真式)

    题目描述 WFF 'N PROOF is a logic game played with dice. Each die has six faces representing some subset ...

  6. 【poj 3295】Tautology (栈)

    做法:穷举五个变量的可能取值.对于每种情况,建立一个栈,从右往左遍历字符串,字符代表数字时入栈,代表运算符时取出一定量的数字,运算后把结果压入栈.最后剩下的就是这个运算式的结果了. 在所有的取值下结果 ...

  7. POJ 3295: Tautology 递归的永真式

    原题链接:Tautology 题目大意:p.q.r.s.t是逻辑变量,K.A.N.C.E是逻辑操作,相应的真值表已经给出.要求给定一个逻辑表达式,判断其是否为永真式,即无论其中的逻辑变量取值如何,其结 ...

  8. Competitive Programming 3题解

    题目一览: Competitive Programming 3: The New Lower Bound of Programming Contests(1) Competitive Programm ...

  9. 做acm 需要学的算法

    做acm 需要学的算法 转一个搞ACM需要的掌握的算法.  要注意,ACM的竞赛性强,因此自己应该和自己的实际应用联系起来.  适合自己的才是好的,有的人不适合搞算法,喜欢系统架构,因此不要看到别人什 ...

  10. acm经典题Mark

    著名的北邮ACM推荐50题 POJ推荐50题 1.标记"难"和"稍难"的题目可以看看,思考一下,不做要求,当然有能力的同学可以直接切掉. 2.标记为A and ...

最新文章

  1. OpenGL clipdistance剪辑距离实例
  2. Linux防火墙iptables基础详解
  3. windowsCE异常和中断服务程序初探(=)
  4. 表单验证的初步实现和省市级联
  5. (篇七)输入任意个数字,输出最大值最小值,且进行排序排序
  6. pyspider 数据存储到mongoDB中
  7. STL中常用容器的数据结构与底层实现
  8. oracle数据库驱动下载(ojdbc)
  9. 数字图像处理入门(冈萨雷斯第三版)
  10. 上海亚商投顾:三大指数小幅下跌 两市成交金额创年内新低
  11. 软件质量-知识点整理
  12. 图像处理——插值算法
  13. Testin云测:深耕企业应用服务
  14. 搜索引擎Autonomy
  15. 搜索引擎SEO 入门学习摘要笔记
  16. 郭霖的LitePal版本历程
  17. html中图像标记的属性,HTML中的图象标签属性
  18. TSP问题——GA(遗传算法)解法(附源代码)
  19. 打开idea的svn项目弹出Action not found:Subversion.Add提示解决办法
  20. 联想创投创业者巅峰对话 杨元庆:企业都会经历螺旋式上升

热门文章

  1. NAXX Central District 2 Kel‘Thuzad
  2. 华为/华三交换机配置NTP时钟同步
  3. 你有哪些“相见恨晚”的UE4学习资料?
  4. vs code php终端输出中文乱码及环境配置解决办法
  5. 计算机数据备份到u盘,技术给你说Win10系统怎么把数据备份到U盘的完全处理手段...
  6. Xdebug、Zend bugger与Zend Optmizer不兼容问题
  7. css 动效彩旗飘扬
  8. 关于身份证加密展示处理以及update table set cou=(select from ..)
  9. HDFS文件访问权限
  10. Nature:细菌增长和扩张的平衡机制