牛客练习赛33

A.tokitsukaze and Counting

题目描述

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

输入描述:

第一行包括一个正整数T(T<=1000),表示T组数据。
接下来T行,每行包括3个正整数L,R,x。
1≤L≤R≤10^18
1≤x≤10^18

输出描述:

输出T行,每一行一个整数,表示答案。
示例1

输入

1
2 5 3

输出

1
解题思路:水!
AC代码:
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long LL;
 4 LL T,L,R,x;
 5 int main(){
 6     while(cin>>T){
 7         while(T--){
 8             cin>>L>>R>>x;
 9             cout<<R/x-(L-1)/x<<endl;
10         }
11     }
12     return 0;
13 }

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分钟,都没有出现怪物。
解题思路:埃氏筛nlogn暴力过。
AC代码:
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long LL;
 4 const int maxn=1e6+5;
 5 int n,k,x,maxxx,cnt[maxn],ans1[maxn],ans2[maxn];
 6 int main(){
 7     while(~scanf("%d%d",&n,&k)){
 8         memset(cnt,0,sizeof(cnt));
 9         memset(ans1,0,sizeof(ans1));
10         memset(ans2,0,sizeof(ans2));maxxx=0;
11         for(int i=0;i<n;++i)scanf("%d",&x),cnt[x]++;
12         for(int i=1;i<=k;++i){
13             if(!cnt[i])continue;
14             for(int j=i;j<=k;j+=i)
15                 ans1[j]+=cnt[i];///统计每个时间点的怪物种类数
16         }
17         for(int i=1;i<=k;++i)maxxx=max(maxxx,ans1[i]),ans2[ans1[i]]++;///最大种类数出现的时间点个数
18         printf("%d %d\n",maxxx,ans2[maxxx]);
19     }
20     return 0;
21 }

猜你喜欢

转载自www.cnblogs.com/acgoto/p/10086227.html
今日推荐