S ( ( ( ( ) ( ) ( ) ) ) )
P-sequence 4 5 6 6 6 6 该右括号之前有多少个左括号
P-sequence 4 5 6 6 6 6 该右括号之前有多少个左括号
W-sequence 1 1 1 4 5 6 该右括号与前面第几个左括号匹配
输入P序列,输出W序列
使用栈实现,p为当前读入的数,num为p之前有多少个左括号,
每读入一个p,就将num+1至p的数字依次压入栈中(num+1<p时不会压入),代表第几个左括号
然后读取顶端的括号编号,输出
然后将顶端编号删除。
/**
* @file source.cpp
* @author hybest
* @date 2013-07-24
* @description
* ACM/ICPC train: Parencodings
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<string>
#include<stack>
#include<map>
#include<queue>
#include<algorithm>
using namespace std;
int main()
{
stack<int>code;
int t, n, p, num, i;
scanf( "%d", &t );
while( t-- )
{
scanf( "%d", &n );
num = 0;
while( n-- )
{
scanf( "%d", &p );
for( i = num + 1; i <= p; i++ )
{
code.push(i);
}
num = p;
printf( "%d", num - code.top() + 1 );
code.pop();
if(n != 0)
printf( " " );
}
printf( "\n" );
}
return 0;
}