//5_4_2: M*A*S*H 通过卡片数字去掉人员 POJ1591 ZOJ1326
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int main()
{
int i,j,k,N,X,cnt,max,a[25],tag[55],loop = 1;
while(scanf("%d",&N) != EOF)
{
scanf("%d",&X);
for(i = 0;i < 20;i ++) scanf("%d",&a[i]);
memset(tag,0,sizeof(tag));
max = N - X;
cnt = 0;
for(i = 0;i < 20;i ++)
{
j = k = 0;
while(j < N)
{
if(tag[j] == 0) k ++;
if(k == a[i])
{
tag[j] = 1;
cnt ++;
k = 0;
}
j ++;
if(cnt == max) break;
}
if(cnt == max) break;
}
printf("Selection #%d\n",loop++);
for(i = 0;i < N;i ++)
if(tag[i] == 0)
{
printf("%d",i + 1);
break;
}
i ++;
for(;i < N;i ++)if(tag[i] == 0) printf(" %d",i + 1);
printf("\n\n");
}
return 0;
}
/*测试结果:通过POJ1591 ZOJ1326检测
10 2 3 5 4 3 2 9 6 10 10 6 2 6 7 3 4 7 4 5 3 2
Selection #1
1 8
47 6 11 2 7 3 4 8 5 10 7 8 3 7 4 2 3 9 10 2 5 3
Selection #2
1 3 16 23 31 47
^Z
请按任意键继续. . .
*/
POJ1591 ZOJ1326 M*A*S*H
最新推荐文章于 2020-10-29 22:10:58 发布
本文介绍了一个基于卡片数字的算法实现,该算法用于从一组编号中筛选出特定数量的人员。通过示例代码展示了如何使用C++来实现这一算法,并通过POJ1591ZOJ1326等在线评测系统的测试案例验证了算法的有效性。
摘要由CSDN通过智能技术生成