没想到有负数,确实够坑的。网上找了一下,还没有比自己写的代码快的,不过也要104ms,坑爹,有没有更快的,提醒一下。
#include<stdio.h>
#include<stdlib.h>
typedef struct Node{
int val,childnum,get;
Node *childr[2];
}Node;
Node *stk[100000];
main()
{
Node *node;
char ch;
int sum,top,tmp,out,pre;
stk[0]=(Node*)malloc(sizeof(Node));
stk[0]->val=stk[0]->childnum=stk[0]->get=0;
stk[1]=(Node*)malloc(sizeof(Node));
while(scanf("%d",&sum)!=EOF){
top=1;
tmp=out=0;
stk[1]->childnum=stk[1]->get=0;
while(ch=getchar()){
if(ch=='('){
tmp=pre*tmp;
if(stk[top]->childnum==0){
stk[top]->val=tmp+stk[top-1]->val;
stk[top]->get=1;
}
stk[++top]=(Node*)malloc(sizeof(Node));
stk[top]->childnum=stk[top]->get=0;
tmp=0;
pre=1;
}else if(ch=='-'){
pre=-1;
}
else if(ch<='9'&&ch>='0'){
tmp=ch-'0'+tmp*10;
}else if(ch==')'){
if(stk[top]->get==0){
stk[top-1]->childr[stk[top-1]->childnum++]=NULL;
}
else{
stk[top-1]->childr[stk[top-1]->childnum++]=stk[top];
}
top--;
if(top==1){
break;
}
else if(out==0&&stk[top]->childnum==2&&stk[top]->childr[0]==NULL&&stk[top]->childr[1]==NULL&&stk[top]->val==sum){
out=1;
}
}
}
if(out==0) printf("no\n");
else printf("yes\n");
}
}