zoukankan      html  css  js  c++  java
  • POJ 3295 Tautology (构造法)

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

    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

    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

    Source

    题意:K  A  N  C  E 分别代表了不同的运算符,然后用栈模拟即可,,,构造法。。。。。。。。。。。。

    #include<iostream>
    #include<cstdio>
    #include<stack>
    #include<cstring>
    
    using namespace std;
    
    const int N=110;
    
    char str[N];
    int p,q,r,s,t;
    stack<int> st;
    
    int isvariables(char ch){
        switch(ch){
            case 'p':st.push(p);return 1;
            case 'q':st.push(q);return 1;
            case 'r':st.push(r);return 1;
            case 's':st.push(s);return 1;
            case 't':st.push(t);return 1;
        }
        return 0;
    }
    
    void operators(char op){
        switch(op){
            case 'K':{
                int x=st.top(); st.pop();
                int y=st.top(); st.pop();
                st.push(x && y);
            }break;
            case 'A':{
                int x=st.top(); st.pop();
                int y=st.top(); st.pop();
                st.push(x || y);
            }break;
            case 'N':{
                int x=st.top(); st.pop();
                st.push(!x);
            }break;
            case 'C':{
                int x=st.top(); st.pop();
                int y=st.top(); st.pop();
                st.push((!x) || y);
            }break;
            case 'E':{
                int x=st.top(); st.pop();
                int y=st.top(); st.pop();
                st.push(x==y);
            }break;
        }
    }
    
    int main(){
    
        //freopen("input.txt","r",stdin);
    
        while(~scanf("%s",str) && str[0]!='0'){
            int len=strlen(str);
            int flag=1;
            for(p=0;p<=1 && flag;p++)
                for(q=0;q<=1 && flag;q++)
                    for(r=0;r<=1 && flag;r++)
                        for(s=0;s<=1 && flag;s++)
                            for(t=0;t<=1 && flag;t++){
                                for(int i=len-1;i>=0;i--)
                                    if(!isvariables(str[i]))
                                        operators(str[i]);
                                int last=st.top();
                                st.pop();
                                if(last==0)
                                    flag=0;
                            }
            if(flag)
                printf("tautology
    ");
            else
                printf("not
    ");
        }
        return 0;
    }
  • 相关阅读:
    ubuntu18.04更新源
    机器学习网址
    ubuntu18.04下安装Anaconda及numpy、matplotlib
    google云使用记录
    tensorflow省钱方案-ml-engine
    Angular 创建项目
    Angular 环境搭建
    android APP国际化一键切换实现
    android 上下滑动标题栏和状态栏改变颜色实现
    android滑动标题栏渐变实现
  • 原文地址:https://www.cnblogs.com/jackge/p/3140899.html
Copyright © 2011-2022 走看看