[测试题]膜法师


Description

在你的帮助下,膜法师们成功地续走了香港记者。

n 个膜法师各有 ai 的时间能续给长者,但是 n 个膜法师一起续命要考虑效率问题,他们要选出一个数 g 使得每个膜法师续给长者的时间是 g 的倍数,膜法师们有一个能力值 k,每个膜法师能偷偷将不超过 k 的时间偷偷直接续给长者,来使膜法阵发挥更大的威力。由于膜法阵有一定容错性,能有 f 个膜法师不符合续给长者的时间是 g 的倍数这个要求。

一句话题意:有 n 个数构成的数列 A 元素为 ai,你要构造一个数列 B 元素为 bi 使得满足bi > 0; ai - k bi ai 使得去除 f 个元素后 bi 的有公约数 g。一个测试点有多组测试数据,当一个测试点的所有测试数据都与标准答案相同时,该测试点得分。

Input

输入文件名为 mogician.in
第一行,一个整数 T,表示数据组数。
对于下面的每一组数据:
第一行,三个整数 nkf 表示膜法师数量,能力值和容错值。
第二行, n 个整数 ai,依次表示每个膜法师的时间。

Output

输出文件名为 mogician.out
T 行,每行升序输出满足题意的所有整数 g

Sample Input

1
6 3 1
78 69 55 102 233 666

Sample Output

1 2 3 4 5 6 11

Hint

题解

 1 #include<set>
 2 #include<map>
 3 #include<cmath>
 4 #include<ctime>
 5 #include<queue>
 6 #include<stack>
 7 #include<vector>
 8 #include<cstdio>
 9 #include<string>
10 #include<cstdlib>
11 #include<cstring>
12 #include<iostream>
13 #include<algorithm>
14 #define LL long long
15 #define RE register
16 #define IL inline
17 using namespace std;
18 const int N=2e6;
19 const int INF=~0u>>1;
20 
21 IL int Read()
22 {
23     int sum=0;
24     char c=getchar();
25     while (c<'0'||c>'9') c=getchar();
26     while (c>='0'&&c<='9') sum=sum*10+c-'0',c=getchar();
27     return sum;
28 }
29 IL void put(int d)
30 {
31     if (!d) return;
32     put(d/10);
33     putchar(d%10+'0');
34 }
35 
36 IL int Min(const int &a,const int &b) {return a<b ? a:b;}
37 IL int Max(const int &a,const int &b) {return a>b ? a:b;}
38 
39 int t,n,k,f,maxn;
40 int a[N+5];
41 int s[N+5];
42 
43 int main()
44 {
45     t=Read();
46     while (t--)
47     {
48         n=Read();k=Read();f=Read();
49         maxn=0;
50         memset(s,0,sizeof(s));
51         for (RE int i=1;i<=n;i++) a[i]=Read(),maxn=Max(maxn,a[i]),s[a[i]]++;
52         for (RE int i=1;i<=maxn;i++) s[i]+=s[i-1];
53         for(RE int d=1;d<=maxn;d++)
54             {
55                 int cnt=s[d-1];
56                 for(RE int j=d;cnt<=f&&j+k+1<=maxn;j+=d)
57                     if (j+k<Min(maxn,j+d-1)) cnt+=s[Min(maxn,j+d-1)]-s[j+k];
58                 if (cnt<=f) put(d),putchar(' ');
59             }
60         putchar('\n');
61     }
62     return 0;
63 }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM