题目链接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. Android TextView 实现文字大小不同和文字颜色不同

    效果图如下: 关键代码如下: StringBuffer sb = new StringBuffer(); if(day > 0) { sb.append("<a href=\&q ...

  2. If the server requires more time, try increasing the timeout in the server editor

    双击服务器,在overview下的Timeouts中的Start选项,改成10000或者较大就可以了.防止服务器自启动频繁.

  3. UVa10082 WERTYU

    #include <stdio.h>#include <string.h> int main(){ // 用C++提交AC    char s[] = "`12345 ...

  4. C++ typedef

    C++ typedef 作用:用来定义类型的同义词,用作类型的说明符. 用法:typedef typeName myTypeName; 使用目的:1. 为了隐藏特定类型的实现,强调使用类型的目的.2. ...

  5. 重定向输入输出流--freopen

    freopen是被包含于C标准库头文件<stdio.h>中的一个函数,用于重定向输入输出流.该函数可以在不改变代码原貌的情况下改变输入输出环境. C99函数声明: FILE *freope ...

  6. highcharts图表组件入门教程:如何监听柱状图柱子点击事件动态更新当前数据点数值和所对应X轴刻度

    highcharts图表组件入门教程:如何监听柱状图柱子点击事件动态更新当前数据点数值和所对应X轴刻度 作者:highcharts | 时间:2014-6-11 14:07:05 | [小  大] | ...

  7. Best practice for Invoke other scripts or exe in PowerShell

    Recently, I find I used many different type method to invoke other scripts or exe in PowerShell. May ...

  8. win7下文件名不能定义为con(任何文件格式)

    从linux传输压缩包到win7下解压缩,总是提示出错,可是在linux下解压都很正常,于是定位出错的文件,发现是con.c和con.h文件,经排查,原因如下: CON是DOS下的特殊设备名 如下由系 ...

  9. 分布式配置管理平台 Disconf

    Distributed Configuration Management Platform(分布式配置管理平台) 专注于各种 分布式系统配置管理 的通用组件/通用平台, 提供统一的配置管理服务. 包括 ...

  10. python defaultdict 类型

    在Python里面有一个模块collections,解释是数据类型容器模块.这里面有一个collections.defaultdict()经常被用到.主要说说这个东西. 综述: 这里的defaultd ...