列表

详情


NC206867. Defeatthemonster

描述

多多最近迷上了网游,游戏中有一只大Boss非常厉害,多多想要组个团打败他。

游戏中有个奇怪的设定,就是打怪的团队人数越多,越容易战胜Boss。

但是如果队伍中的选手能力值差距超过 5 的话,那么Boss将会得到强化。

现在多多作为队长,想要在可选的玩家中挑选尽可能多的队员,但是他又不想让Boss得到强化。多多难住了,不知道怎么办了,你能帮帮他吗?

输入描述

第一行输入一个整数 N (1 ≤ N ≤ 2·105),代表多多可选的玩家数量。

第二行输入 N 个整数,代表每位玩家的能力值。

输出描述

输出一个整数,表示多多可选的最大玩家的数量。

示例1

输入:

6
1 10 17 12 15 2

输出:

3

说明:

选 2,4,5 号玩家
选 3,4,5 号玩家

示例2

输入:

10
1337 1337 1337 1337 1337 1337 1337 1337 1337 1337

输出:

10

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 71ms, 内存消耗: 1160K, 提交时间: 2021-05-22 19:52:42

#include<bits/stdc++.h>
using namespace std;
int a[200005];
int main()
{
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
	cin>>a[i];
	sort(a+1,a+n+1);
	int nzk=0;
	for(int i=1;i<=n;i++)
	{
		int t=upper_bound(a+1,a+n+1,a[i]+5)-a-i;
		nzk=max(nzk,t);
	 } 
	cout<<nzk;
}

C++14(g++5.4) 解法, 执行用时: 93ms, 内存消耗: 1252K, 提交时间: 2020-06-14 16:15:11

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n,a[200005],flag,maxn=-1;
	cin>>n;
	for(int i=0;i<n;i++)
		cin>>a[i];
	sort(a,a+n);
	for(int i=0;i<n;i++)
	{
		flag=upper_bound(a,a+n,a[i]+5)-a;
		maxn=max(flag-i,maxn);
	}
	printf("%d",maxn);
}

Python3(3.5.2) 解法, 执行用时: 407ms, 内存消耗: 21752K, 提交时间: 2020-10-09 20:19:29

n=int(input())
arr=list(map(int,input().split()))
arr.sort()
m=0
l=0
r=0
while r<n:
   if arr[r]-arr[l]>5:
         l+=1      
   m=max(m,r-l+1)
   r+=1
print(m)

上一题