题意:一次card比赛,有m个参赛者(包括你),每个参赛者有n张卡片。每张卡片的编号都不一样。每一轮,所有参赛者都打出一张卡片,编号最大的赢。问你至少能赢几局。
思路:简单贪心
代码如下:
#include<iostream>
using namespace std;
const int mMax = 22;
const int nMax = 52;
struct data
{
int num;
bool my;
bool small;
}card[mMax * nMax];
int main()
{
int m , n, i, j, t = 1;
while(cin >> m >> n && m != 0)
{
for(i = 1; i <= m * n; i ++)
{
card[i].num = i;
card[i].my = false;
card[i].small = false;
}//初始化,给每个card
for(i = 1; i <= n; i ++)
{
int number;
cin >> number;
card[number].my = true;
}//初始化自己的卡片
getchar();
getchar();//按照题目要求
int ans = n;
for(i = m * n; i >= 2 && ans > 0; i --)
if(!card[i].my)
for(j = i - 1; j >= 1; j --)
if(card[j].my && !card[j].small)
{
card[j].small = true;
ans--;
break;
}
cout << "Case " << t++ << ": " << ans << endl;
}
return 0;
}