tokitsukaze and RPG 牛客

本文介绍了一款RPG游戏中高效练级的算法问题。通过分析怪物出现的时间规律,使用暴力算法找出一天内怪物种类最多的时刻及其数量。文章提供了详细的代码实现,并讨论了如何优化处理相同怪物出现时间的问题。

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

题目描述

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分钟,都没有出现怪物。

题意还是很简单的,直接暴力就能过,但是注意的就是很有可能几个怪物的Xi相同,所以注意一下暴力方式,不然怎么改死活也只会过95%
#include<iostream>
int brr[1000001];
int crr[1000001];
using namespace std;
int main()
{
	int n,k;
	cin>>n>>k;
	int arr[100001];
	for(int i=0;i<n;i++)
	{
		cin>>arr[i];
		crr[arr[i]]++;      //相同的Xi
	}
	for(int i=1;i<=k;i++)
	{
		if(crr[i]!=0)        //降低复杂度,虽然不加也对还不超时(垃圾数据)
		for(int j=i;j<=k;j+=i)
		{
			brr[j]+=crr[i];
		 } 
	}
	int max=0;
    for(int i=0;i<=k;i++)    //最大值
    {
        if(brr[i]>max)
            max=brr[i];
    }
    int sum=0;
    for(int i=1;i<=k;i++)    //个数
    {
        if(brr[i]==max)
            sum++;
    }
    cout<<max<<' '<<sum;
}

  

转载于:https://www.cnblogs.com/mozheaishang/p/10088603.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值