0052:扩号匹配

总时间限制: 

1000ms

 

内存限制: 

65536kB

描述

判断一组匹配的左右扩号序列中,每一个右扩号与之相匹配成对的左扩号是整个扩号序列的第几个扩号。输出所有判断结果。

输入

输入有两行。
第一行输入一个整数(该整数必定是偶数),该整数表示扩号序列中一共有多少个扩号。
第二行输入用1和2分别代表左右扩号的扩号序列。例如输入序列11211222,表示扩号序列(()(()))。

输出

输出为一行。即挨个输出每个2(右扩号‘)’)与之相匹配的1(左扩号‘(’)在扩号序列中是第几个,用空格格开。

样例输入


4 1212 4 1122 6 112122 8 11211222 20 11211122122121122212


样例输出


1 3 2 1 2 4 1 2 5 4 1 2 6 5 9 4 12 15 14 1 19


提示

输入的扩号总数一定为偶数。输入的12序列必定是匹配的,1和2的个数相等,必为扩号总数的一半。
测试数据有多组,采用while()循环输入。

来源

06计算概论课

全局题号

1931

添加于

2018-07-09

提交次数

13

尝试人数

6

通过人数

6

你的提交记录

#

结果

时间

​1​

​Accepted​

09-20

import java.util.Scanner;


public class Main {
public static void main(String[] args)
{
Scanner cin=new Scanner(System.in);
while(cin.hasNext())
{
int n=cin.nextInt();
cin.nextLine();
char [] s=cin.nextLine().toCharArray();
int[] vis=new int[n];

for(int i=0;i<n;i++)
{
if(s[i]=='2')
{
for(int j=i-1;j>=0;j--)
{

if(s[j]=='1'&&vis[j]==0)
{

vis[j]=1;
System.out.print((j+1)+" ");
break;
}
}
}
}
System.out.println();

}
}
}