括号编码
Description
S = s1 s2...s2n 是一个符合格式的括号的字符串,S能按下面两种方式编码:
P编码:编码是一个整数序列P = p1 p2...pn,pi是第i个右括号之前的左括号的数目。
W编码:编码是一个整数序列W= p1 p2...pn,wi是第i个右括号的编码值,它等于这个右括号到与之匹配的左括号之间的右括号的数目(包括它自己)。
比如:
S ( ( ( ( ) ( ) ( ) ) ) )
P 4 5 6 6 6 6
W 1 1 1 4 5 6
请写一个程序将P序列转换成W序列。
输入:
第一行是一个整数K,表示有多少个测试用例,以后每两行一个测试用例。每个测试用例第一行为一个整数n(1 <= n <= 20),表示P序列长度,每个测试用例第二行n个非负整数,每个整数之间有一个空格分隔。
输出:
每行输出一个测试用例的结果。每行包括n个整数,每个整数之间用一个空格分隔。
Sample Input
2
6
4 5 6 6 6 6
9
4 6 6 6 6 8 9 9 9
Sample Output
1 1 1 4 5 6
1 1 2 4 5 1 1 3 9
//
#include<iostream>
using namespace std;
int a[1000],stack[1000],count[1000];
char str[1010];
int main()
{
int k,n,i,j,s,t,top,sum;
scanf("%d",&k);
while(k--)
{
cin>>n;
s=0;a[0]=0;sum=0;
for(i=1;i<=n;i++)
{
cin>>a[i];
t=a[i]-a[i-1];
for(j=1;j<=t;j++)
{
str[++s]='(';
count[s]=sum;
}
str[++s]=')';
sum++;
count[s]=sum;
}
top=0;
for(i=1;i<s;i++)
{
if(str[i]=='(') stack[++top]=i;
else
cout<<count[i]-count[stack[top--]]<<" ";
}
cout<<count[i]-count[stack[top--]]<<endl;
}
return 0;
}
分享到:
相关推荐
- **C++**:ACM竞赛的主流语言,熟悉STL库(容器、算法、迭代器),掌握模板、指针、引用等特性。 - **Java**:另一常见语言,理解面向对象编程,熟练使用集合框架。 - **Python**:简洁高效,适合初学者,但可能...
2. 链表:支持动态增删,分为单链表、双链表、循环链表等,适用于实现LRU缓存等。 3. 栈:后进先出(LIFO)结构,常用于括号匹配、回溯算法、递归等。 4. 队列:先进先出(FIFO)结构,用于BFS搜索、事件驱动模型...
##### C/C++编码规范 - **标识符命名注意事项**:遵循一定的命名规则,使代码更加清晰易读。 - **程序的书写格式**:合理缩进、合理换行等,保持代码整洁。 - **注释的写法**:编写有意义的注释,帮助理解代码意图。...
**1.19 C/C++编码规范** - **1.19.1 标识符命名注意事项**:避免使用保留字,使用有意义的名称。 - **1.19.2 程序的书写格式**:合理缩进,保持代码整洁。 - **1.19.3 注释的写法**:解释代码的功能和意图。 - **...
**1.19 C/C++编码规范** - **1.19.1 标识符命名注意事项**: 遵循一定的命名规则。 - **1.19.2 程序的书写格式**: 保持代码整洁和一致。 - **1.19.3 注释的写法**: 适当添加注释以提高代码可读性。 - **1.19.4 一些好...
栈和队列是两种特殊的线性表,它们在算法中有着广泛的应用,如括号匹配、递归算法的实现等,参赛者需要通过实际编程练习理解它们的基本操作和应用场景。 串(字符串)的学习也是一个重要环节。C语言中的字符串处理...
这道题目主要考察了C++的基础语法、字符串处理技巧、字符编码知识以及简单的条件判断逻辑。通过解决此类问题,可以提升对字符串操作和字符编码的理解,以及增强在ACM竞赛中常见的输入输出处理能力。
**1.19 C/C++编码规范** - **1.19.1 标识符命名注意事项**: 如何正确地命名变量和函数等标识符。 - **1.19.2 程序的书写格式**: 编码风格的重要性。 - **1.19.3 注释的写法**: 如何编写有意义的注释。 - **1.19.4 ...