至少可以赢几局,直接求占最大几次。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int list[110], m, n;
int cmp(const void *a, const void *b)
{
return *(int *)a - *(int *)b;
}
int greedy()
{
int result = 0, nohave = 0, j = m - 1;
for (int i = m * n; i > 0; --i) {
if (j == -1) break;
if (i == list[j]) {
if (nohave == 0) {
result++;
j--;
} else {
nohave--;
j--;
}
} else
nohave++;
}
return result;
}
int main()
{
int num = 0;
while (scanf("%d%d", &n, &m) != EOF) {
num++;
if (n + m == 0) break;
memset(list, 0, sizeof(list));
for (int i = 0; i < m; ++i)
scanf("%d", &list[i]);
qsort(list, m, sizeof(int), cmp);
printf("Case %d: %d\n", num, greedy());
}
}