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:uva的题目比较重基本功吧

Posted by hongyan at 2005-10-19 09:04:12 on Problem 1145
In Reply To:uva的题目比较重基本功吧 Posted by:hawk at 2004-05-07 15:53:38
UVA这题我总是WA,在这里就AC了。不知道为什么……
附程序:

#include<stdio.h>
const long maxn=10000;
char ch,s[maxn+5];
long l,n,m,sz[maxn+5],tree[maxn+5],leaf[maxn+5];

long run(long x){
	long tot,p,i;
	tot=0;p=tree[x];
	for (i=x;i>0;i--){
		if (tree[i]==p){
			tot+=sz[i];p=p/2;
		}
	}
	return tot;
}

int main()
{
	long te,i,j,p,mark,bj;
	while(scanf("%ld",&n)!=EOF)
	{
		scanf("%c",&ch);while (ch!='(') scanf("%c",&ch);
		te=1;l=0;
		while (te>0){
			scanf("%c",&ch);
			if (ch>='0'&&ch<='9'||ch=='('||ch==')'||ch=='-'){
				l++;s[l]=ch;
				if (ch=='(') te++;
				else if (ch==')') te--;
			}
		}
		p=1;i=1;m=0;
		while (p>0&&i<=l){
			if (s[i]>='0'&&s[i]<='9'||s[i]=='-'){
				te=0;mark=0;
				if (s[i]=='-'){
					i++;mark=1;
				}
				while (s[i]>='0'&&s[i]<='9'){
					te=te*10+s[i]-'0';i++;
				}
				m++;sz[m]=te;
				if (mark) sz[m]=-sz[m];
				tree[m]=p;
				if (i+3<=l&&s[i]=='('&&s[i+1]==')'&&s[i+2]=='('&&s[i+3]==')') leaf[m]=1;
				else leaf[m]=0;
			}else{
				if (s[i]=='('){
					i++;p=p*2;bj=1;
					for (j=1;j<=m&&bj;j++){
						if (tree[j]==p) bj=0;
					}
					if (!bj) p++;
				}else{
					p=p/2;i++;
				}
			}
		}
		if (m==0) printf("no\n");
		else{
			bj=1;
			for (i=m;i>0&&bj;i--){
				if (leaf[i]&&run(i)==n) bj=0;
			}
			if (!bj) printf("yes\n");
			else printf("no\n");
		}
	}
	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