首先感谢抱抱熊dalao的题解,提供了一种比较简单的思路。
[抱抱熊dalao的题解](https://note.youdao.com/ynoteshare1/index.html?id=52f087d1427e209252c30d79c0be98fd&type=note)
[题目链接](http://acm.zzuli.edu.cn/problem.php?id=2558)
简单的说每次最小值+1都会让这个值已经这个数左边的元素处于这个数左边的元素和这个数右边的元素直接,所以我们就枚举出最大的左边元素,然后除以元素数量。至于为什么要向下取整,是因为如果有小数,则左边这组数的最小值与“左边元素相差1”,这时候向下取整就是最小的元素。最大值同理向上取整。

#include<cstdio>
#include<stack>
#include<queue>
#include<cmath>
#include<climits>
#include<cstring>
#include<cstdlib>
#include<cctype>
#include<algorithm>
#include<iostream>
#include<string>
#include<vector>
#define INF 233333333333333
using namespace std;
typedef long long ll;
typedef pair<int, int> P;
const int maxn = 100005;
int num[maxn];
int main(void) {
int T;
cin >> T;
while(T--) {
int n, k;
cin >> n >> k;
for (int i = 0; i<n; i++)
scanf("%d", &num[i]);
sort(num, num+n);
double sum1 = k, sum2 = -k;
int c1 = 0, c2 = 0;
for (int i = 0; i<n; i++) {
//计算数组最小值能达到最大值时左边元素的累加值
if (sum1 + num[i] < num[i] * (i+1))
break;
sum1 += num[i], c1++;
}
for (int j = n-1; j>= 0; j--) {
//计算数组最大值能达到的最小值时右边元素的累加值
if (sum2 + num[j] > num[j] * (n-j))
break;
sum2 += num[j], c2++;
}
cout << max(0, (int)(ceil(sum2/c2) - floor(sum1/c1) + 1e-10)) << endl;
//计算最小值的最大值并向下取整&&计算最大值的最小值并向上取整,如果最小值大于最大值
//则说明数组能达到最小值与最大值相等的状态
}
return 0;
}

  

zzulioj - 2558 数字的差值的更多相关文章

  1. PHP中比较两个时间的大小与日期的差值

    在这里我们全用到时间戳 mktime(hour,minute,second,month,day,year,[is_dst])     其参数可以从右向左省略,任何省略的参数都会被设置成本地日期和时间的 ...

  2. 【nyoj-1233】差值

    描述 输入一个整数数组,将它们连接起来排成一个数,找出能排出的所有数字中最大,最小的两个,输出两个数的差值.例如输入数组{1,  2},则输出9.     输入 第一行输入一个整数T,表示有T组测试数 ...

  3. 在论坛中出现的比较难的sql问题:32(row_number函数+子查询 sql循环取差值)

    原文:在论坛中出现的比较难的sql问题:32(row_number函数+子查询 sql循环取差值) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路. sql循环取差值,该怎 ...

  4. 奇妙的算法【10】TX--有效号码、最,小耗时、最小差值、差值输出、异或结果

    昨晚刚刚写的几道算法题,难度也还行,就是全部AC有些困难,当时第一题AC.第二题AC 60%,第四题AC 40%,第五题没有时间写完了,这个应该全部AC了:其中第三题没有写出来 1,是否存在符合规范的 ...

  5. JAVA中计算两个日期时间的差值竟然也有这么多门道

    上半年春招的时候,作为面试官,对于面试表现的不错的同学会要求其写一小段代码看看.题目很简单: 给定一个日期,然后计算下距离今天相差的天数. 本以为这么个问题就是用来活跃面试氛围的,但是结果却让人大跌眼 ...

  6. 用Scala实现集合中相邻元素间的差值

    欢迎转载,转载请注明出处,徽沪一郎. 概要 代码这东西,不写肯定不行,新学Scala不久,将实际遇到的一些问题记录下来,日后也好查找. 今天讲的是如何计算同一集合中元素两两之间的差值,即求开始集合(a ...

  7. jsoncpp封装和解析字符串、数字、布尔值和数组

    使用jsoncpp进行字符串.数字.布尔值和数组的封装与解析. 1)下载jsoncpp的代码库 百度网盘地址 :http://pan.baidu.com/s/1ntqQhIT 2)解压缩文件 json ...

  8. 输出有序数组的中两个元素差值为指定值diff的两个元素

    题目: 输出有序数组的中两个元素差值为指定值diff的两个元素. 思路: 这与输出两个元素的和的值为一定值类似,需要两个指针,不同的是:指针不是一左一右,而是一前一后. 如果差值等于diff,则返回: ...

  9. php 算法之切割数组,不用array_chunk(),算法之二,取数组的差值,不用array_diff()

    用php写算法切割数组,不用array_chunk();算法例如以下所看到的. <?php //$array 数组 //$size 每一个数组的个数 //每一个数组元素是否默认键值 functi ...

随机推荐

  1. HTML禁用Flash文件右键

    在项目中遇到一个需求,由于制作Flash的同事没有做禁用Flash文件右键功能!而Flash文件比较多,一个个改不太现实,于是要求用在网页显示的时候禁用Flash右键功能!未禁用之前! 禁用之前: 禁 ...

  2. LInux 学习笔记系列

    1.Linux 就该这么学的笔记系列

  3. SpringBoot 基于web应用开发(请求参数获取,静态资源,webjars)

    SpringBoot 基于web应用开发 一.Lombok使用 1.导入依赖库 <dependency>    <groupId>org.projectlombok</g ...

  4. Ubuntu16 安装 wireshark

    添加源 sudo apt-add-repository ppa:wireshark-dev/stable 更新 sudo apt-get update 安装 sudo apt-get install ...

  5. SpringMVC参数传递方案

    SpringMVC参数传递方案 登录 @PostMapping("/login") @ResponseBody public Map login(String username, ...

  6. C++中的双冒号作用

    1. 作用域符号::的前面一般是类名称,后面一般是该类的成员名称,C++为例避免不同的类有名称相同的成员而采用作用域的方式进行区分如:A,B表示两个类,在A,B中都有成员member.那么      ...

  7. Python课程第六天作业

    1.以自己的理解总结为什么会出现循环导入,并用代码举例说明 循环导入报错并不是应为相互之间引用而导致报错,实际上是在导入一个模块时发现引用的模块不存在 示例如下: m1.py from m2 impo ...

  8. [转] console.log的高级用法

    //基本用法 console.log('最常见用法\n换行'); console.error('输出错误信息 会以红色显示'); console.warn('打印警告信息 会以黄色显示'); cons ...

  9. 浅谈Semaphore类-示例

    Semaphore类有两个重要方法 1.semaphore.acquire(); 请求一个信号量,这时候信号量个数-1,当减少到0的时候,下一次acquire不会再执行,只有当执行一个release( ...

  10. SQL参数化出现执行慢问题

    问题: 应用程序通过参数化访问数据库时出现执行效率慢,直接通过语句查时秒出结果,通过参数化查询时用时是前者的几十上百倍. 排查:1.使用了错误的执行计划; 解决:清除缓存的执行计划(未能解决上面问题) ...