Vijos P1062迎春舞会之交谊舞

描述

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

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

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

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

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

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

格式

输入格式

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

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

输出格式

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



样例

样例1


输入:
6
4 5 6 6 6 6
输出:

1 1 1 4 5 6

样例1

样例输入1[复制]

6
4 5 6 6 6 6

样例输出1[复制]

1 1 1 4 5 6

//

//  main.cpp

//  交际舞会

//

//  Created by 张嘉韬 on 16/2/3.

//  Copyright © 2016 张嘉韬. All rights reserved.

//


#include <iostream>

#include <cstring>

#include <algorithm>

using namespace std;

const int maxn=20000;

int main(int argc, const char * argv[]) {

    //freopen("/Users/zhangjiatao/Desktop/input.txt","r",stdin);

    int sum,n,a[maxn],counter[maxn];

    memset(counter,0,sizeof(counter));

    cin>>n;

    a[0]=0;

    for(int i=1;i<=n;i++) cin>>a[i];

    sort(a+0,a+n);

    sum=0;

    for(int i=1;i<=n;i++)

    {

        sum+=a[i]-a[i-1];

        for(int j=1;j<=sum;j++)

        {

            counter[j]++;

        }

        cout<<counter[sum]<<" ";

        counter[sum]=0;

        sum--;

    }

    return 0;

}

总结
1,认识问题,首先在我们开始读题的时候会有许多疑惑,比如说连续出现舞伴的嵌套等等,这时候不能着急,应该清楚的慢慢的把每一种情况弄清楚,这里我们可以借助样例来帮助我们认识其中的内在规律,经过我们的对例子的不断试验,我们也会最后发现只要每次出现女生,那么她和他左边的男生一定是舞伴,从并不简单的规则中,我们经过对样例的模拟渐渐发现了如此简单的规则,使我们很简单的就解决了这个问题,所以我们可以通过样例来对问题有更深的认识。

样例1

样例输入1[复制]

6
4 5 6 6 6 6

样例输出1[复制]

1 1 1 4 5 6

你可能感兴趣的:(数据结构,算法,栈,vijos)