tokitsukaze and RPG

链接:https://ac.nowcoder.com/acm/contest/308/B
来源:牛客网

tokitsukaze最近沉迷一款RPG。
这个RPG一天有k分钟,每一天从第1分钟开始。
有n种怪物,第i种怪物每天第一次出现的时间为Xi分钟,第二次出现的时间为2Xi分钟,第三次出现的时间为3Xi分钟…同一时刻出现的怪物种类越多,打怪获得的经验也越高。
为了高效练级,tokitsukaze想知道在一天内出现怪物种类最多的时间点会出现多少种怪物,这样的时间点有多少个。
输入描述:
第一行包括2个正整数n,k(1≤n≤105,1≤k≤106),表示有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分钟,都没有出现怪物。

学习到了一个标记的技巧吧;

#include<stdio.h>
int b[1000000+1],a[1000000+1],n,k,k1,mx=-1,mn=1000001;
int main()
{
scanf("%d%d",&n,&k);
for(int i=0;i<n;i++)
{
scanf("%d",&k1);
b[k1]++;
}//出现过就进行标记并记录次数。
for(int i=1;i<=k;i++)
{
for(int j=i;j<=k;j+=i)
{
a[j]+=b[i];
}
}
int index=1,cnt=0;
for(int i=1;i<=k;i++)
{
if(a[i]>a[index])
{
index=i;
cnt=1;
}
else if(a[i]==a[index])
{
cnt++;
}
}
printf("%d %d",a[index],cnt);
return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_42793493/article/details/85246035
RPG