zoukankan      html  css  js  c++  java
  • POJ3295 Tautology 解题报告

    直接上分析:

    首先 弄清各种大写字母的操作的实质

    K 明显 是 and   &

    A 是 or      |

    N 是 not   !

    C  由表格注意到 当 w<=x 时 值为1

    E  当 w==x 时 值 为1;

    弄清了这些就把大写字母当做一个运算符,字符串作为一个前缀表达式来做

    #include <iostream>
    #include <string>
    #include <stack>
    #define  Det 112
    using namespace std;
    int val[5];
    string st;
    stack<int> inte;
    int main() {
    	int len, k, m, x, y;
    	while (cin >> st) {
    		if (st[0] == '0') return 0;
    		for (int n = 0; n <= 31; n++) {
    			for (int i = 0, p = n; i <= 4; i++, p >>= 1) val[i] = p & 1;
    			len = st.length();
    			for (int i = len - 1; i >= 0; i--) {
    				if (st[i] >= Det) inte.push (val[st[i] - Det]);
    				else if (st[i] == 'N') {
    					x = inte.top(); inte.pop();
    					inte.push (!x);
    				}
    				else {
    					x = inte.top(); inte.pop();
    					y = inte.top(); inte.pop();
    					if (st[i] == 'K')  x = x & y;
    					if (st[i] == 'A')  x = x | y;
    					if (st[i] == 'C')  x = (x<=y);
    					if (st[i] == 'E')  x = (x ==y);
    					inte.push (x);
    				}
    			}
    			if (inte.top() == 0) {
    				cout << "not" << endl;
    				break;
    			}
    			else if (n == 31) cout << "tautology" << endl;
    		}
    	}
    	return 0;
    }
    

    http://www.cnblogs.com/keam37/ keam所有 转载请注明出处

  • 相关阅读:
    STR[#6]
    整数
    一些应该记住的东西(持续更新?再也不会更新了)
    退役后的续命杂谈
    51Nod 快速傅里叶变换题集选刷
    支配树学习笔记
    动态点分治入门随讲
    KD树小结
    HNOI2013 BZOJ3142 数列
    BZOJ2001 HNOI2010 城市建设
  • 原文地址:https://www.cnblogs.com/keam37/p/3749143.html
Copyright © 2011-2022 走看看