您的位置:首页 > 其它

南邮 OJ 1977 集训队员筛选

2015-08-07 10:39 197 查看


集训队员筛选

时间限制(普通/Java) : 1000 MS/ 2000 MS 运行内存限制 : 65536 KByte

总提交 : 267 测试通过 : 89

比赛描述

南邮官方有组织举办校级ACM竞赛活动起步于2007年11月,六年来参赛选手累计有80多人次获得了ACM竞赛(国家级)奖项, 20多名学生保送或考取国内外知名大学硕士研究生,成果显著,成为校级ACM队员应该说一个很大的荣誉和技术实力象征,每年申请参加ACM竞赛集训活动的同学非常多,考虑到ACM集训队活动室容量有限,所以需要采取措施对申请者进行筛选,其中一个方案是:
从1开始按顺序给每位申请者分配一个编号,依次为1, 2,..., K,所有申请者按照编号从小到大排成一个队列,然后进行m轮筛选,每一轮都会使用一个数字决定哪些申请者被淘汰,例如,m轮使用的数字依次为r1,
r2, …, rm, 在第i轮中,队列位置是ri倍数的申请者被淘汰(这些位置包括ri,2ri,3ri,…),被淘汰的申请者离开队列,队列开始位置为1,1≤i≤m。
经过m轮筛选,请你从小到大依次给出没有被淘汰申请者的编号。

输入

输入第1行给出一个整数K(1≤K≤100),第2行给出一个整数m(1≤m≤10),m表示进行筛选的轮数。
接下来输入m行,每行给出一个整数,其中第i行包含一个整数ri,含义是当前队列位置是ri倍数的申请者被淘汰,1≤i≤m,2≤ri≤100。

输出

从小到大依次输出没有被淘汰申请者的编号,每一个编号在单独一行输出。

样例输入

10

2

2

3

样例输出

1

3

7

9

题目来源

NUPT

#include<iostream>

#define MAX_N 101
bool del[MAX_N];

int main(){
int k,m,r,i,j;
scanf("%d%d",&k,&m);
while(m--){
scanf("%d",&r);
i = 0;
while(i<=k){
j = 1;
while(j<=r && i<=k){
i++;
if(!del[i]){
j++;
}
}
del[i] = 1;
}
}
for(i=1;i<=k;i++){
if(!del[i]){
printf("%d\n",i);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: