简单的一道模拟题
理解题目就不难。一次A
p数组表示 第i个右括号前面有几个左括号。
w数组表示 第i 个右括号所构成的括号组中 一共有多少个右括号(含第i个右括号)
大致思路:
在读取p数组完成之后 , i 外围变量 ,j 里面的变量
进行循环 :
for( i=0;i<n;i++ )
{
循环( 如果 j< p【i ] ;)
则 放入左括号;
放入右括号;
}
得到w 数组的操作:
使用一个标记flag =1;
w 数组初始化为1;
从 第 i 个 右括号的 下标位置 index 的前一个位置index-1开始;
如果遇到 左括号 ,flag -- , num[i] ++;
如果遇到 右括号 ,flag++;
如果flag =0 ,结束本次循环
0ms
#include <iostream>
#include <queue>
#include <stdio.h>
#include <cmath>
#include <memory.h>
using namespace std;
int p[30];
int w[30];
char c[50];
int main()
{
int t,n,i,j,k,top,flag,cnt;
cin>>t;
while(t--)
{
memset(w,0,sizeof(w));
top=0;
cnt=0;
cin>>n;
for(i=0;i<n;i++)
cin>>p[i];
for(i=0,j=0;i<n;i++)
{
for(;j<p[i];j++)
c[top++]='(';
c[top++]=')';
}
for(i=0;i<top;i++)
{
flag=1;
if(c[i]==')')
{
for(k=i-1;k>=0&&flag;k-- )
{
if(c[k]==')')
{
flag++;
}
if(c[k]=='(')
{
w[cnt]++;
flag--;
}
}
cnt++;
}
}
for(i=0;i<n;i++)
{
cout<<w[i]<<" ";
}
cout<<endl;
}
}