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

没道理啊 怎么会TLE 大牛大虾帮忙seesee

Posted by allen4053040allen at 2010-07-25 21:14:06 on Problem 2106
#include<iostream>
#include<stack>

using namespace std;

char Precede(char x, char y)
{
	//cout << x << y << endl;
	if(x == '!') {
		if(y == '(' || y == '!')  //后者是为了 !!!F  多个叹号的出现
			return '<';
		return '>';
	}
	if(x == '&') {
		if(y == '!' || y == '(')
			return '<';
		return '>';
	}
	if(x == '|') {
		if(y == '|' || y == ')' || y == '#')
			return '>';
		return '<';
	}
	if(x == '(') {
		if(y == ')')
			return '=';
		return '<';
	}
	if(x == ')')
		return '>';
	if(x == '#') {
		if(y == '#')
			return '@';
		return '<';
	}
}

char Operate(char a, char m, char b)
{
	if(a == 'F' && b == 'F')
		return 'F';
	if(a == 'V' && b == 'V')
		return 'V';
	if(a == 'V' && b == 'F' || a == 'F' && b == 'V') {
		if(m == '&')
			return 'F';
		else
			return 'V';
	}
}

int main()
{
	stack<char> s1;   //F V
	stack<char> s2;   //运算符
	char a, b, m, c;
	
	int gg = 1;
	while(scanf("%c", &c) != EOF) {
		s1.empty(), s2.empty();
		s2.push('#');
		//c = getchar();
		while(c == ' ') c = getchar();
		while(c != '#' || s2.top() != '#') {
			//if(s2.size() == 0)
			//	break;
			while(c == ' ') c = getchar();
			if(c == '\n')
				c = '#';
			//cout <<c<< "  "<< s2.top() <<"  "<<s2.size()<< endl;
			
			if(c == 'F' || c == 'V')
				s1.push(c), c = getchar();
			else {
				//cout << "        "<<Precede(s2.top(), c) << endl;
				switch(Precede(s2.top(), c)) {
				case '<' : s2.push(c); c = getchar();break;
				case '=' : s2.pop(); c = getchar();  break;
				case '>' : m = s2.top(), s2.pop(); a = s1.top(), s1.pop();  if(m != '!') { b = s1.top(), s1.pop(); 
						   s1.push(Operate(a, m, b)); break;}
						   else {if(a == 'F') s1.push('V'); else s1.push('F'); break;}
				case '@' : goto X;
				}
			}//cout << "s1.top() "<<s1.top() << endl;
		}
		// cout << "s1.top() "<<s1.top() << endl;
X:		printf("Expression %d: %c\n", gg ++, s1.top());
	}
	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