zoukankan      html  css  js  c++  java
  • 栈/POJ2395(判断是否为恒真式)

    题目:

    p q r s t是变量

    N表示非:如Nr

    E表示是否相等:如Ers = r==s

    A表示或:如Ars = r||s

    K表示与:如Krs = r&&s

    C表示推导:Crs= !r || s

    算法:

    只有5个变量,枚举0~31,每位分别是p q r s t的值,看每次计算的值是不是true

    从字符串结尾开始入栈:

    是变量则入栈

    是操作符则出栈计算完成后再入栈

    最后看栈顶就可以了

    Sample Input
    ApNp
    ApNq
    0

    Sample Output
    tautology
    not

    #include <stack>
    using namespace std;
    int main(int argc, char* argv[])
    {
    	//freopen("i:\\t.txt","r",stdin);
    	char str[128];
    	bool val[5];
    	bool t,t1,t2;
    	memset(val,false,sizeof(val));
    	while(scanf("%s",str)!=EOF){
    		if(!strcmp(str,"0"))return 1;
    		stack<bool> st;
    		for(int v = 0; v<32;v++){
    		for(int k = 0;k<5;k++)
    		val[k]=(v>>k)&1;
    	
    		for(int i=strlen(str)-1;i>=0;i--){
    			switch(str[i]){
    			case 'p':
    			case 'q':
    			case 'r':
    			case 's':
    			case 't':
    				st.push(val[str[i]-'p']);
    				break;
    			case 'N':
    				t = st.top();
    				st.pop();
    				st.push(!t);
    				break;
    			
    			case 'E':
    				t1=st.top();
    				st.pop();
    				t2=st.top();
    				st.pop();
    				st.push(t1==t2);
                    break;
    			case 'A':
    				t1=st.top();
    				st.pop();
    				t2=st.top();
    				st.pop();
    				st.push(t1||t2);
                    break;
    			case 'K':
    				t1=st.top();
    				st.pop();
    				t2=st.top();
    				st.pop();
    				st.push(t1 && t2);
                    break;
    			case 'C':
    				t1=st.top();
    				st.pop();
    				t2=st.top();
    				st.pop();
    				st.push(t1 || !t2);
                    break;
    			}
    			
    		
    		}
    			if(!st.top())break;
    		}
    		if(!st.top())printf("not\n");
    		else printf("tautology\n");
    	}
    	return 1;
    }
  • 相关阅读:
    ZOJ 2158 Truck History
    Knight Moves (zoj 1091 poj2243)BFS
    poj 1270 Following Orders
    poj 2935 Basic Wall Maze (BFS)
    Holedox Moving (zoj 1361 poj 1324)bfs
    ZOJ 1083 Frame Stacking
    zoj 2193 Window Pains
    hdu1412{A} + {B}
    hdu2031进制转换
    openjudge最长单词
  • 原文地址:https://www.cnblogs.com/yangyh/p/2072497.html
Copyright © 2011-2022 走看看