我一直感觉Codeforces最牛逼的一件事就是可以把一件很简单的事用英语描述得谁也看不懂,尤其是对我这种刷题多半要靠翻译的人来说更是如此,比如这次刷到的961A. Tetris,就是把一件很简单的事描述得十分复杂。我甚至去专门搜了别人的博客,看里面翻译也是看得挺懵逼的,只看懂了是关于俄罗斯方块的。
然后我在本子上画了画,瞬间我就懂啥意思了,好家伙一个计数排序给描述得生怕别人看懂啊。我也看了一些博主的代码,实在是太麻烦了。
说了这么多,意思就是一个只有n列的俄罗斯方块,给你m块1x1的小方块以及它们会出现的位置。问你最多能消去几行。
那你就只需要找出现最少的那个数字,就是可以消去的行数啊,一个桶排加一个快排就解决了。
时间复杂度:O(M+NlogN) M为读取输入, NlogN为对N个变量进行排序
#include <bits\stdc++.h>
#define ll long long
#define ld long double
using namespace std;
int main() {
ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
int n, m, a[1010], x;
while(cin >> n >> m) {
memset(a, 0, sizeof(a));
for(int i = 0; i < m; ++ i) cin >> x, a[x - 1] ++;
sort(a, a + n);
cout << a[0] << endl;
}
return 0;
}
以后刷到这场比赛的后续题,本帖继续更新。