南邮 OJ 1977 集训队员筛选

集训队员筛选

时间限制(普通/Java) :  1000 MS/ 2000 MS          运行内存限制 : 65536 KByte
总提交 : 267            测试通过 : 89 

比赛描述

南邮官方有组织举办校级ACM竞赛活动起步于200711月,六年来参赛选手累计有80多人次获得了ACM竞赛(国家级)奖项, 20多名学生保送或考取国内外知名大学硕士研究生,成果显著,成为校级ACM队员应该说一个很大的荣誉和技术实力象征,每年申请参加ACM竞赛集训活动的同学非常多,考虑到ACM集训队活动室容量有限,所以需要采取措施对申请者进行筛选,其中一个方案是:

1开始按顺序给每位申请者分配一个编号,依次为1, 2,..., K,所有申请者按照编号从小到大排成一个队列,然后进行m轮筛选,每一轮都会使用一个数字决定哪些申请者被淘汰,例如,m轮使用的数字依次为r1, r2, …, rm在第i轮中,队列位置是ri倍数的申请者被淘汰(这些位置包括ri2ri3ri),被淘汰的申请者离开队列,队列开始位置为11im

经过m轮筛选,请你从小到大依次给出没有被淘汰申请者的编号。




输入

输入第1行给出一个整数K1≤K≤100),第2行给出一个整数m1≤m≤10),m表示进行筛选的轮数。

接下来输入m行,每行给出一个整数,其中第i行包含一个整数ri,含义是当前队列位置是ri倍数的申请者被淘汰,1≤i≤m2≤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);
		}
	}
}


你可能感兴趣的:(ACM,南邮OJ,集训队员筛选)