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