想了一个晚自习,想出来了。。。。一开始WA是因为EOF用的不对。。。我X。。。。太辛苦了
控制好出栈的位置就好
#include<stdio.h>
#include<string.h>
#include<stack>
#include<iostream>
using namespace std;
#define MAX_SIZE 500000
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
/*stack<int>S;*/
int stacks[400000]={0},top=0;
char all[100000];
int ok=0;
int p=0;
char m;
int i=0,sum=0;
int x=0,y=0;
while(1)
{
if(x==0&&y==1) break;
m=getchar();
if(m!=' '&&m!='\n')
{
all[i++]=m;
if(m=='(')
{
x++;
y=1;
}
else if(m==')')
{
x--;
}
}
}
all[i]='\0';
int L=strlen(all);
/*printf("%d\n",L);*/
for(int i=0;i<L;i++)
{
/*if(i>0)
printf("%d\n",stacks[top-1]);*/
if(all[i]=='(')
{
int temp=0;
sscanf(&all[i+1],"%d",&temp);
/*printf("%d\n",temp);*/
stacks[top++]=temp;
/*压入栈中*/
sum+=temp;
}
if(all[i]==')')
{
if(i+2<L&&all[i-1]=='('&&all[i+1]=='('&&all[i+2]==')')
{
/*说明到达了最低点*/
if(sum==n)
{
ok=1;
break;
}
top--;
i=i+2;
}
else
{
int temp=stacks[top-1];
sum-=temp;
top--;
}
}
}
if(ok)
printf("yes\n");
else
printf("no\n");
}
return 0;
}