您的位置:首页 > 其它

poj 1068 Parencodings

2013-07-30 19:25 375 查看
一个水题,全是小错误,整了一下午。

题目:http://poj.org/problem?id=1068

题意:给出一组括号: (((()()())))

P是”)“前面有几个“(”: 4 5 6 6 6 6

S是“)”前面第几个“(”是对应的: 1 1 1 4 5 6

让你根据给出的P求对应的S

#include<iostream>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std;

int main()
{
int n,i,t,a[1500],b[1500],top,j,sum,ans,x;
cin>>t;
while(t--)
{
cin>>n; x=0;
memset(b,0,sizeof(b));
top=0;
for(i=1; i<=n; i++)
{
cin>>b[i];
for(j=1; j<=b[i]-b[i-1]; j++)
{
a[++top]=-1;//左括号用-1表示
}
a[++top]=1;//右括号用1表示
}
for(i = 1; i <= top; i++)
{
if(a[i]==1)
{
sum=1; ans=1;
for(j=i-1; ; j--)
{
ans+=a[j];
if(a[j]==1)//刚开始以为a[j]=-1,也是false了,唉
sum++;

if(ans==0)
{
x++;
printf("%d",sum);
if(x!=n)//输出格式上也错了好几遍
printf(" ");
else
printf("\n");
break;
}
}
}
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: