金桔玩方块

题目描述

金桔喜欢玩俄罗斯方块,现在有一个带N列的平台。在这个平台上,一些方块会相继出现。如果列中没有方块,则方块将占据底部行。否则,方块将停留在该列的最高方块的顶部。
当所有n列中最底行均有一个方块时,最底行将被清空,你会得到1分,剩下的所有方块会掉下一行。
现在将会依次按顺序出现m方块,且金桔知道它们将会降落的列号。
金桔的任务是计算她将收到的分数。

输入描述:

第一行输入包含两个整数n和m——平台的列数和方块的数目。
下一行包含m个整数c1,c2,…,cm列,分别代表第i个方块将会出现在ci列。

输出描述:

输出一个整数,代表金桔的最终得分
示例1
输入
3 9
1 1 2 2 2 3 1 2 3
输出

2
说明
出现第6个方块之后将会删除最底行(平台上的方块的计数从[2 3 1]变为[1 2 0])。
在第9次方块降落之后,将是[2 3 1],在移除一行之后,变为[1 2 0]。
所以答案等于2。
备注:
(1≤n,m≤10000)
(1≤ci≤n)

思路

本题用桶排序的基本原理,根据列数定义数组。当有方块落下来时就加一,根据题意求遍历求数组的最小值就是最后的得分。

using namespace std;
int main()
{
    int n, m,t,min=10001;
    cin >> n >> m;
    int* p = new int[n];
    for (int i = 0; i < n; i++)
        p[i] = 0;
    for (int i = 0; i < m; i++)
    {
        cin >> t;
        p[t-1]++;
    }
    for (int i = 0; i < n; i++)
    {
        if (p[i] < min)min = p[i];
    }
    cout << min;
    return 0;
}