Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

Re:想了半天终于看懂啦,有思路啦!

Posted by nan5515522 at 2014-04-30 09:40:55 on Problem 3295
In Reply To:想了半天终于看懂啦,有思路啦! Posted by:nan5515522 at 2014-04-28 22:51:28
贡献一次WA之后AC了,说话算话上代码
#include<iostream>
#include<Cstdio>
#include<stack>
using namespace std;

int hash[1000];
char input[5000];
int Cal1(int a, int b, char op)
{
	if(op == 'K')
		return a & b;
	else if(op == 'A')
		return a | b;
	else if(op == 'E')
		return !(a ^ b);
	else 
	{
		if(a == 1 && b == 1)
			return 1;
		else if(a == 1 && b == 0)
			return 0;
		else if(a == 0 && b == 1)
			return 1;
		else if(a == 0 && b == 0)
			return 1;
	}
}

int Judge(char* string)
{
	stack<int>num;
	stack<char>sign;
	int i = 0, temp1, temp2, result;
	char temp, op;

	while(string[i] != '\0')
	    i++;
	i--;    
	
	while (i >= 0)
	{
		temp = string[i];
		 
		if(temp >= 'p' && temp <= 't')
		{
			num.push(hash[temp - 'p']);
		}
		else
			sign.push(temp);
		
		if(!sign.empty())
		{
			op = sign.top();
			sign.pop();
			
			if(op == 'K' || op == 'A'
			   || op == 'C' || op == 'E')
			{
				temp1 = num.top();
				num.pop();
				temp2 = num.top();
				num.pop();
				result = Cal1(temp1, temp2, op);
				num.push(result);
			}
			else
			{
				temp1 = num.top();
				num.pop();
				result = !temp1;
				num.push(result);
			}
		}
		i--;
	}
	
	while(!sign.empty())
	{
		op = sign.top();
		sign.pop();
		
		if(op == 'K' || op == 'A'
		   || op == 'C' || op == 'E')
		{
			temp2 = num.top();
			num.pop();
			temp1 = num.top();
			num.pop();
			result = Cal1(temp1, temp2, op);
			num.push(result);
		}
		else
		{
			temp1 = num.top();
			num.pop();
			result = !temp1;
			num.push(result);
		}
		
	}
	result = num.top();
	//cout << result << endl;
	return result;
}

int Change(char* n)
{
	int flag = 1;
	for(int i = 0; i < 32; ++i)
	{
		hash[0] = i & 1;
		hash[1] = (i >> 1) & 1;
		hash[2] = (i >> 2) & 1;
		hash[3] = (i >> 3) & 1;
		hash[4] = (i >> 4) & 1;
		
		flag = Judge(n);
		if(flag == 0)
			break;
		
	}
	return flag;
	
}

int main()
{
	int res = -1;
	while(1)
	{
	   cin >> input;
		if(input[0] == '0')
			break;
		
	   res = Change(input);
	   if(res == 1)
		   cout << "tautology" << endl;
	   else
		   cout << "not" << endl;
    }
	return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator