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

WA all the time.who can tell me why?Plz

Posted by HouXran at 2007-10-10 14:01:11 on Problem 2045
#include <stdio.h>
#include <string.h>
#define HASH 20000
#define N 100

int hash[HASH];
char s[N];
int stack[N];
int top;

bool empty()
{
	if(top>0) return false;
	else return true;
}

void push(int n)
{
	stack[top]=n;
	top++;
}

int pop()
{
	top--;
	return stack[top];
}

void init()
{
	memset(hash,0xff,sizeof(hash));
}

void get_first()
{
	int i,m,l,k;
	int sum;
	while(1)
	{
		scanf("%s",s);
		if(strcmp(s,"END_OF_FIRST_PART")==0) break;
		scanf("%d",&m);
		l=strlen(s);
		sum=s[0]-'A';
		k=26;
		for(i=1;i<l;i++)
		{
			sum+=(s[i]-'a')*k;
			k*=26;
		}
		hash[sum]=m;
	}
}

//( -10   ) 
int count()
{
	int i,j,k,m;
	int len;
	int tmp;
	char du[N];
	int dtop;

	len=strlen(s);
	dtop=0;
	top=0;
	i=0;
	while(i<len)
	{
		if(s[i]=='(')
		{
			if(dtop>0)
			{
				m=0;
				k=1;
				for(j=0;j<dtop;j++)
				{
					m+=(du[j]-'a')*k;
					k*=26;
				}
				dtop=0;
				if(hash[m]==-1) return -1;
				push(hash[m]);
			}
			push(-10);
			i++;
		}
		else if(s[i]==')')
		{
			if(dtop>0)
			{
				m=0;
				k=1;
				for(j=0;j<dtop;j++)
				{
					m+=(du[j]-'a')*k;
					k*=26;
				}
				dtop=0;
				if(hash[m]==-1) return -1;
				push(hash[m]);
			}
			int tt=pop();
			tmp=0;
			while(tt!=-10)
			{
				tmp+=tt;
				tt=pop();
			}
			push(tmp);
			i++;
		}
		else if(s[i]>='0' && s[i]<='9')
		{
			if(dtop>0)
			{
				m=0;
				k=1;
				for(j=0;j<dtop;j++)
				{
					m+=(du[j]-'a')*k;
					k*=26;
				}
				dtop=0;
				if(hash[m]==-1) return -1;
				push(hash[m]);
			}
			tmp=pop();
			if(i+1<len && s[i+1]>='0' && s[i+1]<='9')
			{
				tmp*=(s[i]-'0')*10+s[i+1]-'0';
				push(tmp);
				i+=2;
			}
			else
			{
				tmp*=s[i]-'0';
				push(tmp);
				i++;
			}
		}
		else if(s[i]>='A' && s[i]<='Z')
		{
			if(dtop>0)
			{
				m=0;
				k=1;
				for(j=0;j<dtop;j++)
				{
					m+=(du[j]-'a')*k;
					k*=26;
				}
				if(hash[m]==-1) return -1;
				push(hash[m]);
				dtop=0;
			}
			du[dtop]='a'+s[i]-'A';
			dtop++;
			i++;
		}
		else if(s[i]>='a' && s[i]<='z')
		{
			du[dtop]=s[i];
			dtop++;
			i++;
		}
	}
	if(dtop>0)
	{
		m=0;
		k=1;
		for(j=0;j<dtop;j++)
		{
			m+=(du[j]-'a')*k;
			k*=26;
		}
		if(hash[m]==-1) return -1;
		push(hash[m]);
		dtop=0;
	}
	tmp=0;
	while(empty()==false)
	{
		int kk=pop();
		tmp+=kk;
	}
	return tmp;
}

int main()
{
	init();
	get_first();
	while(1)
	{
		scanf("%s",s);
		if(strcmp(s,"0")==0) break;
		int k=count();
		if(k==-1) printf("UNKNOWN\n");
		else printf("%d\n",k);
	}
	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