vijos1062 栈的应用

题面:

背景

HNSDFZ的同学们为了庆祝春节,准备排练一场舞会。

描述

明显……交谊舞是2个人跳的,而且一男一女 -____-||||。

由于交谊舞之前的节目安排,所有的表演者都站成了一排。这一排人的顺序满足2点:

①对于一对舞伴男生站在女生的左边。

②任何一对舞伴之间,要么没有人,要么就有若干对舞伴。

排得过于整齐导致那些要表演交谊舞的人都没办法看到自己的舞伴,怎么办类…….
所幸的是,SDFZ的女生比男生聪明得多。她们知道自己左边有几个男生。

现在就请你再告诉这些女生,她们的舞伴距离她们多远(即包括那个男生,一共有多少男生夹在他们之间)。

格式

输入格式

第一行为一个数n,表示参与跳交谊舞的女生个数。

第二行n个数,从左到右表示这n个女生左边分别有多少个男生。

输出格式

一排n个数,行末无空格。表示n个女生与其舞伴的距离。

 

 

 

思路:这很显然是大括号匹配的那类,即栈。

我们知道前缀和,现在我们想要知道每个女生和其舞伴之间有多少对舞伴。

首先一个事情要注意:女生的舞伴一定是离她最近的男生。我们肯定是要把男生压栈,那么也就是栈顶的男生。

那么栈用来存什么?这个就很精髓:存该男生右边第一个女生是谁,即,他是第几个女生左边的男生。

那么这样一来,我们读到第n个女生,向栈中压入这个女生和之前那个女生之间数量的男生。

然后取栈顶的那个男生,栈顶的男生是第n个女生左边的,当前女生是第m个女生,那么中间就有n-m个女生,也就有n-

m个男生。加上他自己,输出。

 

posted @ 2019-12-06 20:12  工程1  阅读(148)  评论(0)    收藏  举报