poj 3295 Tautology(栈)
题目链接:http://poj.org/problem?id=3295
思路分析:判断逻辑表达式是否为永真式问题。根据该表达式的特点,逻辑词在逻辑变量前,类似于后缀表达式求值问题。
算法中使用两个栈,从表达式的后边开始处理表达式中每个字符;若为逻辑变量,使其入栈SR,否则从栈SR中弹出两个逻辑变量,
进行运算后的结果再入栈SR;直到处理完表达式所有的字符。(PS:使用栈可以很好的处理广义表类似的序列)
代码如下:
#include <iostream>
#include <stack>
using namespace std; const int MAX_N = + ;
char A[MAX_N]; int p, q, r, s, t, ans; int Match(char x)
{
int value = ; switch(x)
{
case '':value = ; break;
case '':value = ; break;
case 'p':value = p; break;
case 'q':value = q; break;
case 'r':value = r; break;
case 's':value = s; break;
case 't':value = t; break;
default: value = p;
}
return value;
} int Calc(char a, char b, char T)
{
int x, y, ans; x = Match(a);
y = Match(b);
switch(T)
{
case 'K':ans = x && y; break;
case 'A':ans = x||y; break;
case 'N':ans = !x; break;
case 'C':ans = (!x)||y; break;
case 'E':ans = (x == y);break;
}
return ans;
} int WWF( )
{
int Rusult = ;
int Len = strlen(A);
stack<char>SL, SR; for (p = ; p <= ; ++ p)
for(q = ; q <= ; ++ q)
for(r = ; r <= ; ++ r)
for(s = ; s <=; ++ s)
for(t = ; t <= ; ++ t){ for (int i = ; i < Len; ++ i)
SL.push(A[i]); while (!SL.empty())
{
char x, y, T;
int flag = ; T = SL.top();SL.pop();
switch(T)
{
case 'p':
case 'q':
case 'r':
case 's':
case 't': SR.push(T);flag = ;break;
} if (flag == )
continue;
else
if (T == 'N')
{
x = SR.top();SR.pop();
ans = Calc(x, x, T);
}
else
{
x = SR.top();SR.pop();
y = SR.top();SR.pop();
ans = Calc(x, y, T);
}
SR.push(ans + '');
}
if (ans == )
return ;
}
return ;
} int main()
{
int flag = ; while (scanf( "%s", A ) != EOF)
{
if (A[] == '')
break;
flag = WWF();
if ( flag == )
printf( "not\n" );
else
printf( "tautology\n" );
}
return ;
}
poj 3295 Tautology(栈)的更多相关文章
- poj 3295 Tautology 伪递归
题目链接: http://poj.org/problem?id=3295 题目描述: 给一个字符串,字符串所表示的表达式中p, q, r, s, t表示变量,取值可以为1或0.K, A, N, C, ...
- POJ 3295 Tautology(构造法)
题目网址:http://poj.org/problem?id=3295 题目: Tautology Time Limit: 1000MS Memory Limit: 65536K Total Su ...
- 构造 + 离散数学、重言式 - POJ 3295 Tautology
Tautology Description WFF 'N PROOF is a logic game played with dice. Each die has six faces represen ...
- poj 3295 Tautology (构造)
题目:http://poj.org/problem?id=3295 题意:p,q,r,s,t,是五个二进制数. K,A,N,C,E,是五个运算符. K:&& A:||N:! C:(!w ...
- POJ 3295 Tautology(构造法)
http://poj.org/problem?id=3295 题意: 判断表达式是否为永真式. 思路: 把每种情况都枚举一下. #include<iostream> #include< ...
- poj 3295 Tautology
点击打开链接 Tautology Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8127 Accepted: 3115 ...
- POJ 3295 Tautology (构造题)
字母:K, A, N, C, E 表示逻辑运算 字母:p, q, r, s, t 表示逻辑变量 0 或 1 给一个字符串代表逻辑表达式,如果是永真式输出tautology 否则输出not 枚举每个逻辑 ...
- POJ 3295 Tautology (构造法)
Tautology Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7716 Accepted: 2935 Descrip ...
- [ACM] POJ 3295 Tautology (构造)
Tautology Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9302 Accepted: 3549 Descrip ...
随机推荐
- Css Rest 方法
在当今网页设计/开发实践中,使用CSS来为语义化的(X)HTML标记添加样式风格是 重要的关键.在设计师们的梦想中都存在着这样的一个完美世界:所有的浏览器都能够理解和适用多有CSS规则,并且呈现相同的 ...
- 用JQUERY实现给当前页面导航一个CSS
今天遇到一个问题 当我在导航中点击一个标签后 希望用户知道自己所在导航的位置 只需要根据点击的页面是否加载完成 给这个标签用JS 添加一个CCcurr的 也就是我们常说的current CLASS 代 ...
- 读书笔记 SQL 事务理解
事务的ACID属性 Atomicity 原子性 每个事务作为原子单元工作(即不可以再拆分),也就是说所有数据库变动事务,要么成功要么不成功. SQL Server把每个DML或者 DDL命令都当做一个 ...
- Ubuntu_16.04_Lamp
Ubuntu_16.04安装Lamp开发环境 目录 安装Apache2 安装php5 安装mysql-server 安装php5-mysql(php使用mysql服务,包括mysql,mysqli,m ...
- C++中头文件(.h)和源文件(.cpp)都应该写些什么
头文件(.h): 写类的声明(包括类里面的成员和方法的声明).函数原型.#define常数等,但一般来说不写出具体的实现. 在写头文件时需要注意,在开头和结尾处必须按照如下样式加上预编译语句(如下): ...
- Android 开发笔记 “Sqlite数据库删除”
1.代码方式 Context.deleteDatabase(String databaseName);//删除某一数据库 2.设置里面 进入应用程序 ,然后清除数据就ok了
- bzoj 1295: [SCOI2009]最长距离
题目链接 1295: [SCOI2009]最长距离 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1165 Solved: 619[Submit][ ...
- The introduction to Web.config of ASP.NET #Reprinted#
花了点时间整理了一下ASP.NET Web.config配置文件的基本使用方法.很适合新手参看,由于Web.config在使用很灵活,可以自定义一些节点.所以这里只介绍一些比较常用的节点. <? ...
- ftp一些东东
ftp如果绑定域名 登录时登录名应该写成 域名|用户名
- S70卡
产品名称:Mifare 4K(S70)卡 芯片类型:Philips Mifare 1 S70(MOA2) 存储容量:32Kbit,32个分区,每分区两组密码 工作频率:13.56 MHz 通讯 ...