http://poj.org/problem?id=1068
题目大意:
给定序列一 求序列二
序列一:从前到后 ')' 前有多少个 '('
序列二:按照序列一的顺序每个 ')' 里有多少个完整的括号(包括本身)
分析:
按照序列一还原括号 模拟查找每个 ')' 在其对应的 '(' 内有多少个 ')' 即可
AC代码:
#include <stdio.h>
#include <string.h>
char str[100];
int temp[100];
int main (){
int t;
scanf("%d",&t);
while (t--){
int n;
memset(str,0,sizeof(str));
memset(temp,0,sizeof(temp));
scanf ("%d",&n);
for (int i=1;i<=n;i++){
scanf ("%d",&temp[i]);
str[temp[i-1]+(temp[i]-temp[i-1])+i-1]=')';
}
for (int i=0;i<=(2*temp[n]-temp[n-1]+n-1);i++){
if (str[i]!=')')
str[i]='(';
}
for (int i=0;i<=(2*temp[n]-temp[n-1]+n-1);i++){
if (str[i]==')'){
int temp1=1;
int temp2=1;
for (int j=i-1;j>=0&&temp1!=0;j--){
if (str[j]==')'){
temp2++;
temp1++;
}
else{
temp1--;
}
}
printf ("%d ",temp2);
}
}
putchar('\n');
}
return 0;
}
本文介绍了一种将特定形式的括号序列进行转换的方法,并通过一个示例问题展示了如何使用C语言实现该算法。该算法的主要任务是根据输入的一系列数字来还原括号序列,并计算每个右括号内包含的完整括号对数量。
583

被折叠的 条评论
为什么被折叠?



