题目链接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(栈)的更多相关文章

  1. poj 3295 Tautology 伪递归

    题目链接: http://poj.org/problem?id=3295 题目描述: 给一个字符串,字符串所表示的表达式中p, q, r, s, t表示变量,取值可以为1或0.K, A, N, C, ...

  2. POJ 3295 Tautology(构造法)

    题目网址:http://poj.org/problem?id=3295 题目: Tautology Time Limit: 1000MS   Memory Limit: 65536K Total Su ...

  3. 构造 + 离散数学、重言式 - POJ 3295 Tautology

    Tautology Description WFF 'N PROOF is a logic game played with dice. Each die has six faces represen ...

  4. poj 3295 Tautology (构造)

    题目:http://poj.org/problem?id=3295 题意:p,q,r,s,t,是五个二进制数. K,A,N,C,E,是五个运算符. K:&& A:||N:! C:(!w ...

  5. POJ 3295 Tautology(构造法)

    http://poj.org/problem?id=3295 题意: 判断表达式是否为永真式. 思路: 把每种情况都枚举一下. #include<iostream> #include< ...

  6. poj 3295 Tautology

    点击打开链接 Tautology Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8127   Accepted: 3115 ...

  7. POJ 3295 Tautology (构造题)

    字母:K, A, N, C, E 表示逻辑运算 字母:p, q, r, s, t 表示逻辑变量 0 或 1 给一个字符串代表逻辑表达式,如果是永真式输出tautology 否则输出not 枚举每个逻辑 ...

  8. POJ 3295 Tautology (构造法)

    Tautology Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7716   Accepted: 2935 Descrip ...

  9. [ACM] POJ 3295 Tautology (构造)

    Tautology Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9302   Accepted: 3549 Descrip ...

随机推荐

  1. cocos2d-x 3.1 集成 云风pbc

    cocos2d-x 3.x版本号变动比較大,从改用cmake管理整个项目,到使用python集成一体化的项目工具. 这些都是我喜欢的.我能够非常easy的在我的ubuntu上面搭建好开发环境,并且根本 ...

  2. PowerDesigner 基础使用

    建表使用基础 1.打开软件,点击create model(如下图一)or 右上角 文件→建立新模型 or 快捷键 Ctrl+N(如下图二) 2.选择要生成脚本的数据库类型(见上图二) 3.建表(图三) ...

  3. offsetParent 到底是哪一个?

    前言 温故而知新.遇到offsetParent这个知识点,发现书上讲的不够详细.于是看了看豪情的博客,发现讲得很具体,收藏一下. 正文 不同情况 没有已定位的父节点,且自身position:relat ...

  4. 使用Maven完成自动化打包并部署到Linux服务器下(Tomcat7)

    最近在使用maven,顺便尝试了下tomcat部署.网上找到了很多资料但是都不是最新的,所以贴上比较新的Tomcat7部署代码和配置,方便以后回顾-->测试OK. 1. 首先是配置Tomcat ...

  5. 精简版LVCL,有空看看

    http://tothpaul.free.fr/sources.php?lvcl.lvcl1 http://synopse.info/forum/viewtopic.php?id=665

  6. delphi 文件夹权限设置(执行一个小脚本的笨办法)

    如题,研究了一天,也没再网上找到比较好的方式,自己做了一个.方法如下: 1.创建一个 cmd 命令文件.2.调用该命令. 代码如下:   S:='echo y|cacls h: /t /c /g ev ...

  7. C#使用Windows API 隐藏/显示 任务栏 (FindWindowEx, ShowWindow)

    原文 C#使用Windows API 隐藏/显示 任务栏 (FindWindowEx, ShowWindow) 今天,有网友询问,如何显示和隐藏任务栏? 我这里,发布一下使用Windows API 显 ...

  8. AttributeError: 'module' object has no attribute 'Thread'

    $ python thread.py starting at: 2015-08-05 00:24:24Traceback (most recent call last):  File "th ...

  9. HDU 1722 Cake

    #include<cstdio> int gcd(int m, int n) { ?n:gcd(n % m, m); } int main() { int m, n; while(scan ...

  10. CF 191 div2

    A.数据量很小,直接爆搞. #include <iostream> #include <cstdio> #include <algorithm> #include ...