倍数关系

牛客练习赛33 B tokitsukaze and RPG
tokitsukaze最近沉迷一款RPG。
这个RPG一天有k分钟,每一天从第1分钟开始。
有n种怪物,第i种怪物每天第一次出现的时间为Xi分钟,第二次出现的时间为2*Xi分钟,第三次出现的时间为3*Xi分钟......同一时刻出现的怪物种类越多,打怪获得的经验也越高。
为了高效练级,tokitsukaze想知道在一天内出现怪物种类最多的时间点会出现多少种怪物,这样的时间点有多少个。

输入描述:

第一行包括2个正整数n,k(1≤n≤10^5,1≤k≤10^6),表示有n种怪物,一天有k分钟。
接下来一行包括n个正整数X(1≤Xi≤10^6),含义如题面所示。

输出描述:

输出一行,包括两个整数a,b。
a表示怪物种类数,b表示时间点的个数。
示例1

输入

复制
3 6
2 2 3

输出

复制
3 1

说明

在第6分钟时,3种怪物都出现了。
示例2

输入

复制
3 5
2 2 3

输出

复制
2 2

说明

在第2分钟和第4分钟时,第一种和第二种怪物出现了。
示例3

输入

复制
6 10
1 2 3 4 5 6

输出

复制
4 1

说明

在第6分钟时,出现了第一种、第二种、第三种、第六种怪物。
示例4

输入

复制
3 5
6 6 6

输出

复制
0 5

说明

在第1分钟、第2分钟、第3分钟、第4分钟、第5分钟,都没有出现怪物。
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <string>
 5 #include <algorithm>
 6 #include <utility>
 7 #include <vector>
 8 #include <map>
 9 #include <queue>
10 #include <stack>
11 #include <cstdlib>
12 typedef long long ll;
13 #define lowbit(x) (x&(-x))
14 #define ls l,m,rt<<1
15 #define rs m+1,r,rt<<1|1
16 using namespace std;
17 const int   mod= 1e9+7;
18 const int N=1e6+9;
19 int n,k,x;
20 int num[N],a[N];
21 int  main()
22 {
23     scanf("%d%d",&n,&k);
24     for(int  i=0;i<n;i++){
25        scanf("%d",&x);
26        a[x]++;
27     }
28     for(int i=1;i<=k;i++){
29         if(a[i]){
30             for(int j =i;j<=k;j+=i){
31                 num[j]+=a[i];
32             }
33         }
34     }
35     sort(num+1,num+1+k);
36     int maxx=num[k];
37     int cnt=0;
38     for(int i=k;i>=1;i--){
39         if(num[i]==maxx){
40         cnt++;}
41     }
42     printf("%d %d
",maxx,cnt);
43 }

牛客练习赛33

A tokitsukaze and Counting

给出3个整数L,R,x。tokitsukaze想知道,闭区间[L,R]中,x的倍数出现了几次。

int t;
ll l,r,x;
int  main()
{
    scanf("%d",&t);
    while(t--){
        scanf("%lld%lld%lld",&l,&r,&x);
        ll ans1 =r/x;
        ll ans2=(l-1)/x;
        ll ans =ans1-ans2;
        printf("%lld
",ans);
    }
    return  0;
}
//能被2,3,4,5,整除吗?
https://blog.csdn.net/c_circle/article/details/78492772
原文地址:https://www.cnblogs.com/tingtin/p/10085580.html