金桔玩方块
题目描述
金桔喜欢玩俄罗斯方块,现在有一个带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; }