首页 > 其他分享 >acm22纳新题题解:D.喜子哥开空调

acm22纳新题题解:D.喜子哥开空调

时间:2022-10-30 21:22:36浏览次数:54  
标签:cnt 训练 喜子 队员 acm22 题解 int 区间

喜子哥开空调

Description

喜子掌管着工作室的空调遥控器, 他可以自由调整室内的温度, (这么牛?!我咋不信。。)但每个人最喜欢的室内温度不都相同, 如果当前室温k与自身适应的温度a[i]的差值没超过忍耐限度p, (即 | a[i]-k | ≤ p)那么这个小伙伴就能够正常训练, 否则就会变得十分烦躁无心做题。

现在已知有n名队员在工作室里训练, 身为工作室集训的头儿, 喜子哥想知道, 在最佳情况下, 最多有多少队员能够同时正常训练

Input

第一行两个数n,p(1≤n,p≤1000000),n:队员数量, p:题意中的忍耐限度

接下来每行有n个数ai表示每名队员最适应的温度

Output

输出一个数字, 表示最多有多少队员同时正常训练

Sample Input 1

6 2
1 5 3 2 4 6

Sample Output 1

5

温度调成3或4,都可以满足5名队员同时正常训练
通过对题意的分析,
我们需要找到最多的正常训练人数,
也就是说找到一个温度区间[k-p, k+p],使得在这个区间里的人最多

  1. 我这里搞了个cnt[]数组, Ⅰ.cnt[x]初始化为表示喜欢x的人数
  2. 然后用到了前缀和的思想(可以去了解一下), 利用前缀和可以快速求得某段区间的总和,Ⅱ.经过处理后cnt[x](x为正整数)可以表示区间[1,x]之间的人数和, 例如下图

image
那么cnt[b]-cnt[a]就可以表示区间cnt[a]~cnt[b]之间的总数

c++写法(c语言同理,只是输入输出换成printf/scanf的写法)

#include<iostream>
#include<algorithm>
using namespace std;

const int N = 1e4;
int cnt[N],s[N];
int main()
{
    int n,p,res=0;
    cin>>n>>p;
    
    int x;
	//Ⅰ.cnt[x]初始化为表示喜欢x的人数
    for(int i = 0 ; i < n; i++){
        scanf("%d",&x);
        cnt[x] ++;
    }
	//Ⅱ.经过处理后cnt[x]可以表示区间[1,x]之间的人数和
    for(int i = 1 ; i <= n; i++){
        cnt[i] += cnt[i-1];
    }
	//枚举1~n之间的每个温度
    for(int i = 1 ; i <= n; i++){
		//注意i+p不能超过n, i-p-1不能比0小
		//为什么是i-p还要减一呢,因为我们想求[i-p,i+p]之间的总和
		//就像上面的图里的a一样, 需要减一
        int t = cnt[min(n, i+p)] - cnt[max(0,i-p-1)];//求区间和
		//更新res
        if(res < t) res = t;
    }
    cout << res;
}

标签:cnt,训练,喜子,队员,acm22,题解,int,区间
From: https://www.cnblogs.com/Knight02/p/d-kongtiao.html

相关文章

  • CSP-S 2022 Unofficial 题解
    去年有个CSP-S2021Unofficial的题解但是那玩意咕掉了(主要是不想写最后一题,但是准备省选的时候会补上毕竟ZJ卷怪一堆懂得都懂),不过今年保证在NOIP2022前会写完这份题......
  • CSP2022-J组题解
    最后一次j组了,写篇题解纪念一下A假如\(a=1\),\(a^b=1\)假如\(a>1\),可以发现当\(b>30\)时\(a^b\)必然大于\(10^9\)于是我们可以暴力计算,如果计算的过程中大于\(1......
  • CF1622D. Shuffle 题解 组合数学/枚举
    题目链接:​​https://codeforces.com/problemset/problem/1622/D​​题目大意:给定一个长度为\(n\)的01字符串\(s\),你可以对这个字符串进行最多一次操作,该次操作需要选择......
  • WIN2012远程桌面授权服务器许可证问题解决方法
    WIN2012服务器报错为由于没有远程桌面授权服务器可以提供许可证,远程会话连接已断开。请跟服务器管理员联系。原因是服务器安装了远程桌面服务RemoteApp,这个是需要授权的。微......
  • P2299Mzc和体委的争夺战题解
    这是一道Dijkstra经典题目(裸题)P2299Mzc和体委的争夺战代码思路:Dijkstra+链式前向星+优先队列+结构体其实很简单的重点:if(vis[n])return;意思是找到了立即返回......
  • Python 多重继承时metaclass conflict问题解决与原理探究
    背景最近有一个需求需要自定义一个多继承abc.ABC与django.contrib.admin.ModelAdmin两个父类的抽象子类,方便不同模块复用大部分代码,同时强制必须实现所有抽象方法,没想按想......
  • 洛谷P8539 「Wdoi-2」来自地上的支援 题解
    ST表做法思路当进行第\(x\)次操作时,若\(b_1\)到\(b_{x-1}\)中有比\(b_x\)大的数,那这次操作轮不到\(b_x\),并且前面的本来就比它大的数只会越来越大,所以以后的......
  • LeetCode 题解 | 1. 两数之和 Javascript 版
    题目给定一个整数数组nums 和一个整数目标值target,请你在该数组中找出和为目标值target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个......
  • LeetCode 题解 | 3. 无重复字符的最长子串 Javascript
    /***@param{string}str*@returnsnumber*思路:1.start与range组合成一个窗口,窗口内的子串就是当前最长不重复的字符串*2.range每次循环递增*......
  • LeetCode 题解|6. Z 字形变换
    /***@param{string}s*@param{number}numRows*@return{string}*/varconvert=function(s,numRows){//存储结果constrows=[];//指针下一......