poj 3295 构造
来源:互联网 发布:单板滑雪u型池具体数据 编辑:程序博客网 时间:2024/05/22 17:16
题意:本题是二叉树的先根遍历,可采用堆栈或递归。给出一个式子,判断是否是永真式,命题有p,q,r,s,t五种,逻辑谓词有K(&),A(|),N(~),C(包含),E(==)五种,我自己是这么理解的用词可能不准确。
思路:构造一个栈,c++现成有,从右往左读输入的字符串,把命题所对应的数据(已经事先生成了,是这些命题的全排列,所有情况组合情况都考虑)压入栈中,每次遇到一个谓词时就取出数据计算,结果再入栈共后边使用。
我这是看的别人写的比较好的代码,我写了注释,转自:http://www.cnblogs.com/yongze103/archive/2010/08/03/1791612.html
3295Accepted208K16MSC++2232B#include <iostream>#include <string>#include <stack>#include <cstdio>#include <cstring>using namespace std;stack <bool> sta;bool val[5], flag;int main() {//freopen("poj3295.in", "r", stdin);int i, j;string str;bool tmp1, tmp2;while(cin >> str && str != "0"){flag = 1;for(i = 0; i<32 && flag; ++i)//i从0-31(00000-11111){memset(val, 0, sizeof(val));for(j = 0; j<5; ++j)//j从0-4{if(i & (1<<j))//(1 << j)的值 分别为10000、01000、00100、00010、00001,下接val[j] = 1;//和i取“&”后得分贝可以得出p q r s t全排列的每一种情况。建议自己在纸上枚举一下。}for(j = str.length() -1; j>=0; --j){switch(str[j]){case 'p': case 'q': case 'r': case 's': case 't':sta.push(val[str[j] - 'p']); break;//事先把每个数据压入栈,使用的时候再取。case 'N':tmp1 = sta.top();sta.pop();sta.push(!tmp1);break;case 'E':tmp1 = sta.top();sta.pop();tmp2 = sta.top();sta.pop();sta.push(tmp1 == tmp2);case 'A':tmp1 = sta.top();sta.pop();tmp2 = sta.top();sta.pop();sta.push(tmp1 || tmp2);break;case 'K':tmp1 = sta.top();sta.pop();tmp2 = sta.top();sta.pop();sta.push(tmp1 && tmp2);break;case 'C':tmp1 = sta.top();sta.pop();tmp2 = sta.top();sta.pop();if(tmp2 && !tmp1)tmp1 = 0;elsetmp1 = 1;sta.push(tmp1);break;default:break;}}if(!sta.top()) flag = 0;//针对每种情况,如果计算后的结果为0,就不是永真式}if(flag) cout << "tautology" << endl;else cout << "not" << endl;}return 0;}
- poj 3295 构造
- poj 3295 构造法
- POJ 3295 Tautology 构造方法
- POJ - 3295 - Tautology (构造)
- POJ 3295 Tautology 构造 stack
- [POJ 3295]Tautology[构造][DFS]
- poj 3295 Tautology(构造法)
- POJ 3295 Tautology(构造法)
- poj 3295 Tautology(经典构造算法题)
- POJ 3295 Tautology(构造法 stack)
- POJ 3295 Tautology (构造法 栈)
- [ACM] POJ 3295 Tautology (构造)
- POJ 3295-Tautology(构造法+栈)
- POJ 3295 Tautology(构造法)
- POJ 3295 Tautology(递归、构造)
- POJ 3295 Tautology(构造)(栈)
- poj 1186 哈希表构造
- poj 2201 构造
- 何在Ext.Ajax.request正请求后台数据时弹出个正在请求的提示框?
- c++中引用与指针的区别
- 希尔排序Linux下C实现
- OpenCV的分类器(模式识别)
- 标准模板库STL中优先队列Priority Queues使用手册
- poj 3295 构造
- Dat Guard 结构 + 工作原理 (图文并茂)
- poj2079凸包求最大三角形面积
- Action中获取Servlet的其他对象-request.response,ActionMapping,context
- java.util.concurrent(JUC)的研究--》atomic原子操作--》happens-before法则
- 解决 adb devices时no permissions的问题
- C#水波纹效果控件的实现
- 快速排序
- mfc橡皮筋技术哦亲~