POJ3295 Tautology(枚举)
题目链接。
分析:
最多有五个变量,所以枚举所有的真假值,从后向前借助于栈验证是否为永真式。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <stack> using namespace std; const int maxn = + ; stack<bool> S;
char s[maxn];
bool hash[], ans; void check(char pos) { if(s[pos] == 'N') {
bool x = S.top(); S.pop();
S.push(!x);
} else if(s[pos] >= 'p' && s[pos] <= 't') {
S.push(hash[s[pos]]);
} else {
bool x, y;
x = S.top(); S.pop();
y = S.top(); S.pop(); if(s[pos] == 'K') S.push(x&y);
else if(s[pos] == 'A') S.push(x|y);
else if(s[pos] == 'C') S.push(!x | y); //即蕴含
else if(s[pos] == 'E') S.push(!(x^y));
} } int main() {
//freopen("my.txt", "r", stdin);
while(scanf("%s", s) == ) {
if(s[] == '') break;
ans = true;
int i; for(i=; i<(<<); i++) {
hash['p'] = i & ;
hash['q'] = i & (<<);
hash['r'] = i & (<<);
hash['s'] = i & (<<);
hash['t'] = i & (<<); int pos = strlen(s)-; while(pos >= ) {
check(pos);
pos--;
} ans = S.top(); S.pop(); if(ans == false) { printf("not\n"); break; }
} if(i >= (<<)) printf("tautology\n");
} return ;
}
另一种写法
该写法参考自Disuss:http://poj.org/showmessage?message_id=168123(里面对于莫名其妙的错误还有讲解,不错)
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <stack> using namespace std; const int maxn = + ; char s[maxn];
int c_s, value; bool getval() {
bool t1, t2; switch(s[c_s++]) {
case 'p': return (value & (<<));
case 'q': return (value & (<<));
case 'r': return (value & (<<));
case 's': return (value & (<<));
case 't': return (value & (<<)); case 'N': return !getval();
case 'K': t1 = getval(); t2 = getval(); return t1 & t2;
case 'A': t1 = getval(); t2 = getval(); return t1 | t2;
case 'C': t1 = getval(); t2 = getval(); return (!t1 | t2);
case 'E': t1 = getval(); t2 = getval(); return (!(t1^t2));
}
} int main() {
// freopen("my.txt", "r", stdin);
while(scanf("%s", s) == ) {
if(s[] == '') break; for(value = ; value < (<<); value++){
c_s = ;
if(!getval()) { printf("not\n"); break; }
} if(value >= (<<)) printf("tautology\n");
} return ;
}
POJ3295 Tautology(枚举)的更多相关文章
- [POJ3295]Tautology
[POJ3295]Tautology 试题描述 WFF 'N PROOF is a logic game played with dice. Each die has six faces repres ...
- POJ3295 Tautology(栈+枚举)
Description WFF 'N PROOF is a logic game played with dice. Each die has six faces representing some ...
- poj3295 Tautology —— 构造法
题目链接:http://poj.org/problem?id=3295 题意: 输入由p.q.r.s.t.K.A.N.C.E共10个字母组成的逻辑表达式, 其中p.q.r.s.t的值为1(true)或 ...
- POJ3295——Tautology
Tautology Description WFF 'N PROOF is a logic game played with dice. Each die has six faces represen ...
- POJ-3295 Tautology (构造)
https://vjudge.net/problem/POJ-3295 题意 有五种运算符和五个参数,现在给你一个不超过100字符的算式,问最后结果是否恒为1? 分析 首先明确各运算符的意义,K(&a ...
- POJ3295 Tautology重言式
Tautology 思路很简单,对于p.q.r.s.t暴力枚举是0还是1,判断即可.判断时像写表达式求值那样用栈.为了方便可以从后往前,因为最后一个肯定不是运算.那几个奇奇怪怪的函数可以找规律然后转为 ...
- poj3295 Tautology , 计算表达式的值
给你一个表达式,其包括一些0,1变量和一些逻辑运算法,让你推断其是否为永真式. 计算表达式的经常使用两种方法:1.递归: 2.利用栈. code(递归实现) #include <cstdio&g ...
- ACM学习历程——POJ3295 Tautology(搜索,二叉树)
Description WFF 'N PROOF is a logic game played with dice. Each die has six faces representing some ...
- POJ3295 Tautology 解题报告
直接上分析: 首先 弄清各种大写字母的操作的实质 K 明显 是 and & A 是 or | N 是 not ! C 由表格注意到 当 w<=x 时 值为1 E 当 ...
随机推荐
- 最蛋疼的bug:读取图片缩略图(一定要在相冊查看下形成缓存)
近期的一个连接服务端的应用.须要读取图片,一般供用户公布商品选择上传图片.初始的图片列表应该是缩略图.仅仅有确定了,才上传原图,OK不多说上代码 package edu.buaa.erhuo; imp ...
- C primer plus 读书笔记第十二章
C的强大功能之一在于它允许我们控制程序的细节.C的内存管理系统正是这种控制能力的例子.它通过让我们决定哪些函数知道哪些变量以及一个变量在程序中存在多长时间来实现这些控制. 1.存储类及其说明符 主要的 ...
- "Storage Virtualization" VS "Software-Defined Storage"
http://www.computerweekly.com/blogs/StorageBuzz/2013/07/storage-virtualisation-vs-soft.html 这篇blog的目 ...
- ActiveNotifications
The NotificationManager can tell you how many notifications your application is currently showing. T ...
- Linux read/write fread/fwrite两者区别
Linux read/write fread/fwrite两者区别 1,fread是带缓冲的,read不带缓冲. 2,fopen是标准c里定义的,open是POSIX中定义的. 3,fread可以读一 ...
- (转)java之多线程
Java线程:概念与原理 一.操作系统中线程和进程的概念 现在的操作系统是多任务操作系统.多线程是实现多任务的一种方式. 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程 ...
- AndroidStudio SDK版本下载
错误描述: pkg: /data/local/tmp/com.example.myapplication Failure [INSTALL_FAILED_OLDER_SDK] 出现这个错误,研究了半天 ...
- 教你写Jquery插件
最近很多网友说 jQuery插件是什么啊?怎么写的啊?我不会写啊? 一大堆的问题一时都不知道怎么回答他们,个人认为是网友们把问题复杂化了. 其实就是把一些常用.实用.通用的功能封装起来而以,简单的来讲 ...
- @ManyToMany 两个表多对多关联
两个表属于多对多关系 如 Teacher <=> Student 表teacher 主键 id 表student 主键id 中间关联表 teacher_student 两个字段 t_id ...
- Linq101-Set
using System; using System.Collections.Generic; using System.Linq; namespace Linq101 { class Set { / ...