列表

详情


NC229310. 空调遥控

描述

作为集训队的队长,一直掌管着集训室的空调遥控器,她需要调整温度使队员们更好地进入训练状态,已知集训室一共有名队员,每位队员都有一个温度诉求,当室内温度为时,当且仅当时,这个队员能够正常进入训练状态,否则就会开始躁动,作为队长,需要调整好温度,她想知道,在最佳情况下,最多有多少队员同时进入训练状态

输入描述

第一行两个数n,p(1≤n,p≤1000000),含义如题面描述
接下来一行n个数a[i](1≤a[i]≤1000000)表示每个队员的温度诉求

输出描述

输出一个数字,表示最多有多少队员同时进入训练状态

示例1

输入:

6 2
1 5 3 2 4 6

输出:

5

说明:

温度调成3或4,都可以满足5名队员同时进入训练状态

原站题解

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

C++(g++ 7.5.0) 解法, 执行用时: 424ms, 内存消耗: 4416K, 提交时间: 2023-04-01 16:18:32

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int a[N];
int n,p;
int main()
{
	cin>>n>>p;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
    sort(a+1,a+n+1);
	int i=1,j=2;
	int ma=0;
	for(j=2;j<=n;j++)
	{
		while(a[j]-a[i]>2*p) i++;
		ma=max(ma,j-i+1);
	}
	cout<<ma<<endl;
	return 0;
} 

C++ 解法, 执行用时: 385ms, 内存消耗: 12152K, 提交时间: 2021-11-07 19:15:24

#include <stdio.h>
int main()
{
	int n,m,t=0,max=0;
	scanf("%d %d",&n,&m);
	int a[3000005]={0},b;
	for(int i=0;i<n;i++){
		scanf("%d",&b);
		a[b]++;
	}
	for(int i=1;i<=n;i++){
		for(int j=i;j<2*m+i+1;j++){
			t+=a[j];
		}
		if(t>max) max=t;
		t=0;
	}
	printf("%d",max);
	return 0;
}

Python3 解法, 执行用时: 1796ms, 内存消耗: 123792K, 提交时间: 2021-11-12 21:32:00

n=input().split()
l=input().split()
a,b=int(n[0]),int(n[1])
l=[int(i) for i in l]
l.sort()
r=0
p,h=0,0
while h<len(l):
    if l[h]<=l[p]+2*b:
        h+=1
        r=max(r,h-p)
    else:
        p+=1
print(r)

上一题