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

题目描述

牛牛有一块长度大小为n的菜园,他首先对这块菜园从1到n进行了编号,每一块地分别为1号、2号…n号菜地,然后他往每块菜地中都种下了一些水稻,一开始,第i块菜地中的水稻高度均为a[i]个单位。然后我们知道水稻的生长周期都是n天,也就是说每逢n天水稻就会长高一个单位。但是不巧的是整个菜园中每一块菜地的生长周期都错开了,具体来说,第1天的时候第1块菜地中的水稻长高一个单位,第2天的时候第2块菜地中的水稻长高一个单位…第n天的时候第n块菜地中的水稻长高一个单位,接下来第n+1天,又轮到第1块菜地中的水稻长高一个单位以此类推。 每天在水稻进行自然生长之后,牛牛可以施展他神奇的魔法,这个魔法可以让任意一块菜地中的水稻长高一个单位,或者让任意一块菜地中的水稻缩短一个单位,当然啦,他也可以不进行任何操作。 牛牛看到菜园中的水稻参差不齐十分难受,请问至少在第几天,他能够让所有的水稻都长到同一个高度?
输入描述:
第一行是一个正整数n,1≤n≤1051\leq n \leq 10^51≤n≤105,表示有菜园有n块菜地。接下来一行输入n个正整数,表示每块菜地上水稻的高度,水稻的高度1≤a[i]≤1091 \leq a[i] \leq 10^91≤a[i]≤109。保证一开始输入时水稻的高度不全都相同(数据保证答案至少为1)。
输出描述:
输出一个正整数表示问题的答案。

示例1

输入
3
1 2 3

输出

1

说明

第一天,第一块菜地的水稻高度增加1,牛牛使用他的魔法使得第三块菜地的水稻再减少1。此时三块水稻的高度为2 2 2.所有水稻的高度均相同。所以答案为1天。
题意实际上就是一个求一个时刻,使得当前的序列通过±次数最少 -> 离全部相同的步数最小 -> “货仓选址” -> 求中位数+二分这个时刻即为答案

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<bitset>
#include<vector>#define ls (p<<1)
#define rs (p<<1|1)
//#pragma GCC optimize (2)
//#pragma G++ optimize (2)
#define over(i,s,t) for(register int i = s;i <= t;++i)
#define lver(i,t,s) for(register int i = t;i >= s;--i)
//#define int __int128
#define lowbit(p) p&(-p)
using namespace std;typedef long long ll;
typedef pair<int,int> PII;const int N = 1e5+7;
/*题意实际上就是一个求一个时刻,使得当前的序列通过+-次数最少——>离全部相同的步数最小->货仓选址->求中位数+二分这个时刻即为答案*/
int n,m;
int a[N],b[N];
bool check(int x){ll res = 0;over(i,1,n)b[i] = a[i]+x/n+(x%n>=i);sort(b+1,b+1+n);over(i,1,n)res += abs(b[i]-b[n/2]);return res >x;}int main()
{scanf("%d",&n);over(i,1,n)scanf("%d",&a[i]);ll l = 0,r = 1e15+7;while(l<r){int mid = (l+r)/2;if(check(mid))l = mid +1;else r = mid;}printf("%d\n",l);return 0;
}

解题报告 - 牛客练习赛63 C - 牛牛的揠苗助长(货仓选址+二分)相关推荐

  1. 牛客练习赛63 C.牛牛的揠苗助长

    牛客练习赛63 C.牛牛的揠苗助长 题目链接 题目描述 牛牛有一块长度大小为n的菜园,他首先对这块菜园从1到n进行了编号,每一块地分别为1号.2号-n号菜地,然后他往每块菜地中都种下了一些水稻,一开始 ...

  2. 牛客练习赛63 F 牛牛的树行棋 (SG函数+树差分)

    链接:https://ac.nowcoder.com/acm/contest/5531/F 来源:牛客网 牛牛的树行棋 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K, ...

  3. 牛客练习赛63 F.牛牛的树行棋(博弈 SG函数)

    题目链接:https://ac.nowcoder.com/acm/contest/5531/F 牛牛的树行棋 前置知识 思路 代码 前置知识 这道题目需要博弈论中的SG函数的知识,这里就不多赘述.主要 ...

  4. 牛客练习赛63 B 牛牛的鱼缸

    分类讨论即可: AC代码: int main() {int t;int l, h;int L, H;sdd(h, l);sdd(H, L);double ans, x;x = (H * l * 1.0 ...

  5. 牛客练习赛63 F.牛牛的树行棋(启发式合并+sg打表)

    LINK 假设只有一枚棋子,那么这枚棋子在叶子节点的 s g sg sg值显然是零 其他节点可以 s g sg sg打表推出来,由于只需要子树内的 s g sg sg值,似乎需要用到启发式合并计算 但 ...

  6. 牛客练习赛68 B.牛牛的算术

    牛客练习赛68 B.牛牛的算术 题目链接 题目描述 牛牛最近学习了取模是什么 于是他看到了下面这一道题: 多次询问:每次询问包含一个正整数 n 要求你输出下列结果 ∏i=1n∑j=1i∑k=1ji×j ...

  7. 牛客练习赛68 A.牛牛的mex

    牛客练习赛68 A.牛牛的mex 题目链接 题目描述 牛牛现在有一个长度为 nnn 的序列 a1,a2,-,ana_1,a_2,\ldots,a_na1​,a2​,-,an​.现在牛牛有 qqq 次询 ...

  8. 牛客练习赛76 E 牛牛数数(线性基加二分)

    牛客地址 思路:全部组合异或,很容易想到使用线性基,正好线性基中有一个求第k小的用法,那我们可以二分来找 K是第几小的数,然后用总数减去. #include <iostream> #inc ...

  9. 牛客练习赛 63 F-牛牛的树行棋

    F-牛牛的树行棋 大佬题解 对于每一个棋子来说,都是独立的,因此当前局面的 SG 值就是每一枚棋子的 SG 值的异或和.若一枚棋子的往子树内最多可以走 kkk 步,它的 SG 值为 kkk.然后就可以 ...

最新文章

  1. PCL:点云配准1、基础知识:平面3自由度、旋转矩阵精讲
  2. 数据库分析函数 MySQL_MySql数据库索引分析explain函数的使用
  3. abap如何找屏幕增强_因增强导致BDC录屏执行异常的梗
  4. 第二章:2.4 卷积性质
  5. 如何解决秒杀的性能问题和超卖的讨论 及防止按钮多次点击
  6. Memobus总线光端机产品功能介绍
  7. html5中如何去掉input type date默认
  8. WCF服务实例激活类型编程与开发(转)
  9. 转载:必须掌握的八个【cmd 命令行】
  10. hive单机安装 beeline连接hive无法连接
  11. CIKM 2021 | 基于异质图学习的搜索广告关键词推荐模型及实践
  12. 默认情况下linux主机在机房托管期间被,托管机房作业未传之秘
  13. EasyAR+ZXing实现UnityAR二维码扫描
  14. 三层vxlan原理_【老衲推荐】VXLAN技术在园区网的应用探讨
  15. nuc8i5beh安装黑苹果的安装教程,接近完美运行
  16. C语言中统计英文单词的个数
  17. Android kotilin 滴+震动提示
  18. HTML哪个单位是角度,css 角度单位有哪些?
  19. SpringBoot+MyBatisPlus+Thymeleaf+AdminLTE增删改查实战
  20. command-codes

热门文章

  1. 擦除:提升 CNN 特征可视化的 3 种重要手段
  2. 基于OpenCV的视障人士实时目标检测
  3. 聊聊找工作中的项目经验问题(推荐系统和智能问答)
  4. OpenCV+Tensorflow实现实时人脸识别演示
  5. ★移动机器人 激光 构建地图 定位
  6. Android 手机卫士--自定义组合控件构件布局结构
  7. puppet自动化运维之资源关系
  8. Memory Information on Windows Mobile(续)
  9. 小程序统一服务消息_[miniblog]小程序订阅消息踩坑记
  10. Python初学者零碎基础笔记(一)