您的位置:首页 > 其它

POJ 3295 Tautology

2012-11-26 20:49 363 查看
Tautology

Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 6693 Accepted: 2558
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 xKwxAwxNwCwxEwx
1 111011
1 001000
0 101110
0 000111
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

Source
Waterloo Local Contest, 2006.9.30
这题我是用的dfs枚举的所有可能取值
#include <iostream>
#include <string>
#include <math.h>
using namespace std;
string s1,s2;
int a[10],k1,top;
char s3[1000];
int main()
{
void dfs(int k);
int i,j,n,m,s,t;
while(cin>>s1)
{
if(s1=="0")
{
break;
}
k1=0;
dfs(1);
if(k1==0)
{
cout<<"tautology"<<endl;
}else
{
cout<<"not"<<endl;
}
}
return 0;
}
void dfs(int k)
{
int i,j,x,y;
char c;
for(i=0;i<=1;i++)
{
a[k]=i;
if(k<=4)
{
dfs(k+1);
}else
{
s2=s1;
for(j=0;j<=s1.size()-1;j++)
{
if(s1[j]>='A'&&s1[j]<='Z')
{
;
}else
{
x=s1[j]-'p'+1;
if(a[x]==0)
{
c='0';
}else
{
c='1';
}
s1[j]=c;
}
}
while(s1.size()>1)
{
top=0;
for(j=0;j<=s1.size()-1;)
{
if(s1[j]>='A'&&s1[j]<='Z'&&s1[j]!='N'&&(s1[j+1]=='0'||s1[j+1]=='1')&&(s1[j+2]=='0'||s1[j+2]=='1'))
{
if(s1[j]=='K')
{
if(s1[j+1]=='1'&&s1[j+2]=='1')
{
s3[top++]='1';
}else
{
s3[top++]='0';
}
}else if(s1[j]=='A')
{
if(s1[j+1]=='1'||s1[j+2]=='1')
{
s3[top++]='1';
}else
{
s3[top++]='0';
}
}else if(s1[j]=='C')
{
if((s1[j+1]=='1'&&s1[j+2]=='1')||(s1[j+1]=='0'&&s1[j+2]=='1')||(s1[j+1]=='0'&&s1[j+2]=='0'))
{
s3[top++]='1';
}else
{
s3[top++]='0';
}
}else if(s1[j]=='E')
{
if((s1[j+1]=='1'&&s1[j+2]=='1')||(s1[j+1]=='0'&&s1[j+2]=='0'))
{
s3[top++]='1';
}else
{
s3[top++]='0';
}
}
j+=3;
}else if(s1[j]=='N'&&(s1[j+1]=='0'||s1[j+1]=='1'))
{
if(s1[j+1]=='0')
{
s3[top++]='1';
}else
{
s3[top++]='0';
}
j+=2;
}else
{
s3[top++]=s1[j];
j++;
}
}
s3[top]='\0';
s1=s3;
}
if(s1[0]=='0')
{
k1=1;
return ;
}
s1=s2;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: