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

GCC提交WA,C提交RE,我汗~~

Posted by yzhw at 2009-03-22 16:52:51 on Problem 1100
# include <stdio.h>
# include <string.h>
# include <stdlib.h>
typedef struct
{
	int p;
	char c;
}sig;
int total;
int eq[100],len;
__int64 cul(__int64 a,__int64 b,char c)
{
	if(c=='+') return a+b;
	else if(c=='-') return a-b;
	else return a*b;
}
int chk()
{
	sig stack2[50];
	__int64 stack1[50];
	int top1=-1,top2=-1,i,p=1;
	for(i=1;i<=len;i++)
	{
		if(eq[i]=='(') p++;
		else if(eq[i]==')')
		{
			p--;
			stack1[top1-1]=cul(stack1[top1-1],stack1[top1],stack2[top2].c);
			top1--;
			top2--;
		}
		else if(eq[i]=='-'||eq[i]=='+'||eq[i]=='*')
		{
			if(top2==-1||p>stack2[top2].p)
			{
				stack2[++top2].p=p;
				stack2[top2].c=(char)eq[i];
			}
			else
			{
				stack1[top1-1]=cul(stack1[top1-1],stack1[top1],stack2[top2].c);
		    	top1--;
		    	stack2[top2].c=(char)eq[i];
				stack2[top2].p=p;
			}
		}
		else stack1[++top1]=eq[i];
	}
	if(top1) stack1[top1-1]=cul(stack1[top1-1],stack1[top1],stack2[top2].c);
	if(stack1[0]==total) return 1;
	else return 0;
}

int det(int num)
{
    if(num>len)
	{
		return chk();
	}
	else if(eq[num]!=' ') return det(num+1);
	else
	{
		eq[num]='+';
		if(det(num+1)) return 1;
		eq[num]='-';
		if(det(num+1)) return 1;
		eq[num]='*';
		if(det(num+1)) return 1;
		return 0;
	}
}
int main()
{
	int casenum=1;

	while(1)
	{
		char temp[1000],*t;
		int i;
		scanf("%d",&total);
		if(!total) break;
		scanf(" = ");
		gets(temp);
		printf("Equation #%d:\n",casenum++);
		len=0;
		t=strtok(temp," ");
		while(t!=NULL)
		{
			if(t[0]=='(')
			{
				eq[++len]='(';
				t=t+1;
			}
			eq[++len]=atoi(t);
			if(t[strlen(t)-1]==')')
			{
				eq[++len]=')';
				t[strlen(t)-1]='\0';
			}
			eq[++len]=' ';
			t=strtok(NULL," ");
		}
		len--;
		if(det(1)) 
		{
			printf("%d=",total);
			for(i=1;i<=len;i++)
			{
				if(eq[i]!='+'&&eq[i]!='-'&&eq[i]!='*'&&eq[i]!='('&&eq[i]!=')') printf("%d",eq[i]);
				else printf("%c",eq[i]);
			}
			printf("\n");

		}
		else printf("Impossible\n");
		printf("\n");
	}
}


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