poj3295Tautology

http://poj.org/problem?id=3295

这几天补一补poj之前落下的题吧 

枚举

  1 #include <iostream>
  2 #include<cstdio>
  3 #include<cstring>
  4 #include<algorithm>
  5 #include<stdlib.h>
  6 #include<cmath>
  7 using namespace std;
  8 char s[101],ko[510];
  9 int f[10],ta[110],ff[10],p[10];
 10 int main()
 11 {
 12     int i,j,k;
 13     ko['p'] = 1;
 14     ko['q'] = 2;
 15     ko['r'] = 3;
 16     ko['s'] = 4;
 17     ko['t'] = 5;
 18     while(gets(s)!=NULL)
 19     {
 20         if(s[0]=='0')
 21         break;
 22         int flag = 0,g=0,e=0;
 23         memset(ff,0,sizeof(ff));
 24         k = strlen(s);
 25         for(i = 0 ; i < k  ;i++)
 26         {
 27             if(ko[s[i]]&&!ff[ko[s[i]]])
 28             {
 29                 ff[ko[s[i]]] = 1;
 30                 p[e++] = ko[s[i]];
 31             }
 32         }
 33         for(i = 0 ; i  < (1<<e) ; i++)
 34         {
 35             memset(f,0,sizeof(f));g=0;
 36             for(j = 0 ; j < e ; j++)
 37             {
 38                 if(i&(1<<j))
 39                 {
 40                     f[p[j]] = 1;
 41                 }
 42             }
 43             for(j = k-1; j>=0 ; j--)
 44             {
 45                 if(s[j]>='A'&&s[j]<='Z')
 46                 {
 47                     if(s[j]=='K')
 48                     {
 49                         if(ta[g]==1&&ta[g-1]==1)
 50                         ta[g-1] = 1;
 51                         else
 52                         ta[g-1] = 0;
 53                         g--;
 54                     }
 55                     else if(s[j]=='N')
 56                     {
 57                         if(ta[g])
 58                         ta[g] = 0;
 59                         else ta[g] = 1;
 60                     }
 61                     else if(s[j]=='A')
 62                     {
 63                         if(ta[g]==0&&ta[g-1]==0)
 64                         ta[g-1] = 0;
 65                         else
 66                         ta[g-1] = 1;
 67                         g--;
 68                     }
 69                     else if(s[j]=='C')
 70                     {
 71                         if(ta[g]==1&&ta[g-1]==0)
 72                         ta[g-1] = 0;
 73                         else ta[g-1] = 1;
 74                         g--;
 75                     }
 76                     else
 77                     {
 78                         if(ta[g]==ta[g-1])
 79                         ta[g-1] = 1;
 80                         else
 81                         ta[g-1] = 0;
 82                         g--;
 83                     }
 84                 }
 85                 else
 86                 {
 87                     ta[++g] = f[ko[s[j]]];
 88                 }
 89             }
 90             if(!ta[g])
 91             {
 92                 flag = 1;
 93                 break;
 94             }
 95         }
 96         if(!flag)
 97         puts("tautology");
 98         else
 99         puts("not");
100     }
101     return 0;
102 }
View Code
原文地址:https://www.cnblogs.com/shangyu/p/3523139.html