Tautology

Description

WFF 'N PROOF is a logic game played with dice. Each die has six faces representing some subset of the possible symbols K, A, N, C, E, p, q, r, s, t. A Well-formed formula (WFF) is any string of these symbols obeying the following rules:

  • p, q, r, s, and t are WFFs
  • if w is a WFF, Nw is a WFF
  • if w and x are WFFs, Kwx, Awx, Cwx, and Ewx are WFFs.

The meaning of a WFF is defined as follows:

  • p, q, r, s, and t are logical variables that may take on the value 0 (false) or 1 (true).
  • K, A, N, C, E mean and, or, not, implies, and equals as defined in the truth table below.
Definitions of K, A, N, C, and E
     w  x   Kwx   Awx    Nw   Cwx   Ewx
  1  1   1   1    0   1   1
  1  0   0   1    0   0   0
  0  1   0   1    1   1   0
  0  0   0   0    1   1   1

A tautology is a WFF that has value 1 (true) regardless of the values of its variables. For example, ApNp is a tautology because it is true regardless of the value of p. On the other hand, ApNq is not, because it has the value 0 for p=0, q=1.

You must determine whether or not a WFF is a tautology.

Input

Input consists of several test cases. Each test case is a single line containing a WFF with no more than 100 symbols. A line containing 0 follows the last case.

Output

For each test case, output a line containing tautology or not as appropriate.

Sample Input

ApNp
ApNq
0

Sample Output

tautology
not 【题目来源】
Waterloo Local Contest, 2006.9.30
http://poj.org/problem?id=3295
【题目大意】
给你一个合式公式,让你判断是否为重言式。
【题目分析】
这题考了一些离散数学的概念在里面,题目并不难,就是构造加模拟。
使用一个栈来从后往前计算。 AC代码:
#include<iostream>
#include<cstring>
#define MAX 110
using namespace std;
int a[MAX];
char str[MAX];
void calc(int p,int q,int r,int s,int t)
{
   int top=;
   int t1,t2;
   int len=strlen(str);
   for(int i=len-;i>=;i--) //所有的都判断一遍,直到a[0]
   {
       if(str[i]=='p') a[top++]=p;
  else if(str[i]=='q') a[top++]=q;
  else if(str[i]=='r') a[top++]=r;
  else if(str[i]=='s') a[top++]=s;
  else if(str[i]=='t') a[top++]=t;

if(str[i]=='K')
       {
          t1=a[--top];
          t2=a[--top];
          a[top++]=t1&&t2;
       }
       else if(str[i]=='A')
       {
          t1=a[--top];
          t2=a[--top];
          a[top++]=t1||t2;
       }
      else if(str[i]=='N')
       {
          t1=a[--top];
          a[top++]=!t1;
       }
      else if(str[i]=='C')
       {
          t1=a[--top];
          t2=a[--top];
          if(t1==&&t2==)
              a[top++]=;
          else a[top++]=;
       }
       else if(str[i]=='E')
       {
          t1=a[--top];
          t2=a[--top];
          if(t1==t2)
           a[top++]=;
          else a[top++]=;
       }
   }
}
bool judge()
{
   int p,q,r,s,t;
   for(p=;p<;p++)                       //枚举所有的情况
    for(q=;q<;q++)
     for(r=;r<;r++)
      for(s=;s<;s++)
       for(t=;t<;t++)
       {
           calc(p,q,r,s,t);
           if(a[]==)
           {
               return false;
           }
       }
    return  true;
}
int main()
{
   while(cin>>str)
   {
       if(strcmp(str,"0")==) break;
       if(judge())
           cout<<"tautology"<<endl;
       else cout<<"not"<<endl;
   }
}

最新文章

  1. Nginx深入详解之多进程网络模型
  2. 说下查询动作 Pivot
  3. 033医疗项目-模块三:药品供应商目录模块——供货商药品目录t添加查询功能----------Dao层和Service层和Action层和调试
  4. 【BZOJ-2115】Xor 线性基 + DFS
  5. JavaScript设计模式——单体模式
  6. 学会使用Chromium中的LOG
  7. Floyd最短路径算法
  8. Gulp-入门教程 搭配环境
  9. SDL2.0教程翻译&#183;目录
  10. Method to fix &quot;Naming information cannot be located because the target principal name is incorrect.&quot; for AD replication failure
  11. 团队作业八-Beta版本冲刺计划及安排
  12. (五):C++分布式实时应用框架——微服务架构的演进
  13. Web版记账本开发记录(二)开发过程遇到的问题小结1 对数据库的区间查询
  14. RuntimeError: Model class app_anme.models.User doesn&#39;t declare an explicit app_label and isn&#39;t in an application in INSTALLED_APPS.---python学习错误记录
  15. scss 转为 less
  16. dyne*cm and N*m
  17. 从 Secure Element 到 Android KeyStore
  18. 从零开始学 Web 之 jQuery(六)为元素绑定多个相同事件,解绑事件
  19. Arduino入门笔记(9):蓝牙模块及第一辆蓝牙遥控小车
  20. Jmeter分布式测试的各种坑之jmeter-server修改ip

热门文章

  1. sql server 大数据, 统计分组查询,数据量比较大计算每秒钟执行数据执行次数
  2. logger.info占位符的使用
  3. 隐马尔科夫模型(Hidden Markov Models) 系列之二
  4. Git恢复删除的分支
  5. using 中写 return 一样会释放using 中对象 但是会在外面定义一个一样的对象 赋值后 释放 最后 return 外面定义的那个对象
  6. window配合虚拟机VMware搭建虚拟ubuntu服务器入坑集锦
  7. 微信小程序到底把什么定义为风险内容?
  8. linux 下按照文件名模糊查找文件
  9. 使用async进行结构化并发程序开发
  10. django rest framework 解析器组件 接口设计,视图组件 (1)