| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
用c++实现 一次ac (暴力实现)注意栈的实现#include<iostream>
#include <sstream>
#include<string>
#include<cstdlib>
#include<cmath>
#include<cstdio>
#include<cctype>
#include<stack>
#include<fstream>
#include<cassert>
#include<map>
#include<set>
#include<vector>
#include<cstring>
#include<algorithm>
#include"limits.h"
using namespace std;
//#define debug
bool Judge(char op,bool a,bool b=false)
{
switch(op){
case 'K':
return a&&b;
break;
case 'A':
return a||b;
break;
case 'N':
return !a;
break;
case 'C':
return !(a&&!b);
break;
case 'E':
return a==b;
break;
}
assert(1);
return 1;
}
bool isSymbol(char k)
{
return k=='K'||k=='A'||k=='N'||k=='C'||k=='E';
}
struct Char
{
char c;
int t;
Char(char cc,int tt):c(cc),t(tt){
}
};
struct Bool
{
bool b;
int t;
Bool(bool bb,int tt):b(bb),t(tt){
}
};
bool solve(const string & s)
{
vector<Char> sym;
vector<Bool> var;
int cnt=0;
for (int i = 0; i < s.size(); ++i)
{
if (isSymbol(s[i]))
{
sym.push_back(Char(s[i],cnt++));
}
else{
var.push_back(Bool(s[i]-'0',cnt++));
}
while(1){
if (var.size()&&sym.size()&&sym.back().c=='N'&&var.back().t>sym.back().t)
{
char cc=sym.back().c;
bool bb=var.back().b;
sym.pop_back();
var.pop_back();
var.push_back(Bool(Judge(cc, bb),cnt++));
continue;
}
if (var.size()>=2&&sym.size()&&sym.back().t<var.back().t&&sym.back().t<var[var.size()-2].t)
{
char cc=sym.back().c;
bool bb=var.back().b;
sym.pop_back();
var.pop_back();
bool aa=var.back().b;
var.pop_back();
var.push_back(Bool(Judge(cc, aa,bb),cnt++));
continue;
}
break;
}
}
assert(var.size()==1&&sym.size()==0);
return var.back().b;
}
void replaceAll(string & s,char c,char re)
{
long p=s.find(string(1,c));
while (p!=string::npos) {
s.replace(p, 1, string(1,re));
p=s.find(string(1,c));
}
}
void preProcess(string & s,int p)
{
int vec[5]={0};
int k=0;
while (p>0) {
vec[k++]=p%2;
p/=2;
}
replaceAll(s,'p', (char)vec[0]+'0');
replaceAll(s,'q', (char)vec[1]+'0');
replaceAll(s,'r', (char)vec[2]+'0');
replaceAll(s,'s', (char)vec[3]+'0');
replaceAll(s,'t', (char)vec[4]+'0');
}
int main()
{
#ifdef debug
freopen("/Users/steven/Desktop/tmp.txt","r",stdin);
clock_t a=clock();
#endif
string s;
while (cin>>s&&s!="0") {
bool ans=1;
for (int i=0; i<32; i++) {
string tmp=s;
preProcess(tmp, i);
if (!solve(tmp)) {
ans=0;
break;
}
}
if (ans) {
cout<<"tautology"<<endl;
}
else
cout<<"not"<<endl;
}
#ifdef debug
clock_t b=clock();
cout<<"running time:"<<(b-a)/(double)CLOCKS_PER_SEC<<endl;
#endif
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator