题意:有M个人,一人N张牌,每轮牌面最大的人赢(牌面只可能是1~M*N中的一个数且不重复),给出一个人的牌,求其至少能够赢的局数。
分析:出一张排,看对手是否有比这张牌更大的牌,如果有取其最小(贪心),即对手出一张最小可以压过你的牌。否则这轮就赢了。需要用到一个vis数组来记录哪些牌出过。
代码:
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
bool vis[1005];
int val[55];
int main()
{
//fstream cin("test.txt");
int k = 0;
int m, n;
while (cin >> m >> n,m||n)
{
memset(vis, 0, sizeof(vis)); //没清零,WA了一次=。=
k++;
for (int i = 0; i < n; i++)
{
cin >> val[i];
vis[val[i]] = 1;
}
in