poj3295
include
include
include
using std::stack;
//K, A, N, C, E //逻辑符号
//p, q, r, s, t //bool值
char buf[101];
stack
bool data[5] = { false };
bool WFF(char* str, int val)
{
//init p q r s t
for (int i = 0; i < 5; ++i) {
data[i] = (1 << i) & val;
}
while (!s_stack.empty()) s_stack.pop();
int strLen = strlen(str);
bool a, b;
while (--strLen >= 0)
{
switch (buf[strLen])
{
case 'p':
s_stack.push(data[0]);
break;
case 'q':
s_stack.push(data[1]);
break;
case 'r':
s_stack.push(data[2]);
break;
case 's':
s_stack.push(data[3]);
break;
case 't':
s_stack.push(data[4]);
break;
case 'K':
a = s_stack.top(); s_stack.pop();
b = s_stack.top(); s_stack.pop();
s_stack.push(a && b);
break;
case 'A':
a = s_stack.top(); s_stack.pop();
b = s_stack.top(); s_stack.pop();
s_stack.push(a || b);
break;
case 'N':
a = s_stack.top(); s_stack.pop();
s_stack.push(!a);
break;
case 'C':
a = s_stack.top(); s_stack.pop();
b = s_stack.top(); s_stack.pop();
s_stack.push(!a || b);
break;
case 'E':
a = s_stack.top(); s_stack.pop();
b = s_stack.top(); s_stack.pop();
s_stack.push(a == b);
break;
default:
break;
}
}
return s_stack.top();
}
int main()
{
while (true)
{
memset(buf, 0, sizeof(char) * 101);
scanf("%s", buf);
if (strcmp(buf, "0") == 0) break;
bool tautology = true;
for (int val = 0; val <= 0x1f; ++val)
{
if (!WFF(buf, val)) {
tautology = false;
break;
}
}
if (tautology) {
printf("tautology\n");
}
else {
printf("not\n");
}
}
return 0;
}

浙公网安备 33010602011771号