P6874 [COCI2013-2014#6] KOCKICE 题解

  • 题目
    • 链接
    • 字面描述
      • 题目背景
      • 题目描述
      • 输入格式
      • 输出格式
      • 样例 #1
        • 样例输入 #1
        • 样例输出 #1
      • 样例 #2
        • 样例输入 #2
        • 样例输出 #2
      • 提示
        • 样例 1 解释
        • 【数据规模与约定】
        • 【说明】
  • 思路
  • 代码实现

题目

链接

https://www.luogu.com.cn/problem/P6874

字面描述

题目背景

堆积木!

题目描述

Mirko 和 Slavko 在玩积木。他们俩都有自己的一堆砖头。一共有 NNN 列砖头(其中 NNN 为奇数)。

Mirko 桩的第 iii 列中有 mim_imi​ 块砖,而 Slavko 每列有 sis_isi​ 个。

他们决定创建两堆一样的砖头,这几堆的高度首先是严格下降,然后是严格上升(参见下方右图),相邻列的高度恰好相差 111(见图)。最低的列的左右两侧的砖头数量必须相同。

允许两种操作:

  • 从某一列的顶部移除一块砖。
  • 在某一列的顶部加上一块砖。

问在满足上述要求的情况下,最少要几次操作?

输入格式

输入的第一行包含一个奇数 NNN,即两个人砖头的堆数。

输入的第二行包含 NNN 个整数 mim_imi​,即 Mirko 堆中的列高。

输入的第三行包含 NNN 个整数 sis_isi​,即 Slavko 堆中的列高。

输出格式

输出所需的最少操作次数。

样例 #1

样例输入 #1

3
1 2 3
3 2 2

样例输出 #1

3

样例 #2

样例输入 #2

5
2 3 0 1 4
3 3 2 3 1

样例输出 #2

10

提示

样例 1 解释

Mirko 在其桩的第一列的顶部放置了两块砖,而 Slavko 在他桩的第三列的顶部放置了一块砖。

【数据规模与约定】
  • 对于 40%40\%40% 的数据,满足 1≤N≤10001\le N\le 10001≤N≤1000,0≤mi,si≤10000\le m_i,s_i\le 10000≤mi​,si​≤1000。
  • 对于 100%100\%100% 的数据,满足 1≤N≤3×1051\le N\le 3\times 10^51≤N≤3×105,0≤mi,si≤10120\le m_i,s_i\le 10^{12}0≤mi​,si​≤1012。
【说明】

题目译自 COCI2013-2014 CONTEST #6 T3 KOCKICE

思路

此题存在一个性质,只要确定中间的那个位置的数是多少,其他位置上需要做几次操作此题存在一个性质,只要确定中间的那个位置的数是多少,其他位置上需要做几次操作此题存在一个性质,只要确定中间的那个位置的数是多少,其他位置上需要做几次操作直接用O(1)的时间复杂度算出直接用O(1)的时间复杂度算出直接用O(1)的时间复杂度算出
暴力枚举中间的数 时间复杂度O(10^12)
所以只能二分了,
此题之所以能二分存在一个性质
如果中间位置上的数是最优解时,无论比他大还是小的数,需要的操作次数一定多于他
所以二分到一个数mid
我们只需要判断他和mid+1的关系就能判断时往左找还是往右找

代码实现

#include<bits/stdc++.h>
#define ll long long
using namespace std;const int maxn=3e5+10;
const ll inf=1e14;
int n;
ll ans;
ll a[maxn],b[maxn];
inline ll check(ll k){ll cnt=0;//x 记录这一位应该改到的值for(int i=1;i<=n/2+1;i++){ll x=(ll)k+n/2+1-i;cnt=(ll)cnt+abs(x-a[i])+abs(x-b[i]);}for(int i=n/2+2;i<=n;i++){ll x=(ll)k+i-n/2-1;cnt=(ll)cnt+abs(x-a[i])+abs(x-b[i]);}return cnt;
}
int main(){scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%lld",&a[i]);for(int i=1;i<=n;i++)scanf("%lld",&b[i]);ll l=0,r=inf;while(l<r){ll mid=l+r>>1;//如果中间数为mid+1的操作次数是多于mid的,那答案在左边if(check(mid)<check(mid+1))r=mid; else l=mid+1;//否则在右边}printf("%lld\n",check(l));return 0;
}

P6874 [COCI2013-2014#6] KOCKICE 题解相关推荐

  1. AHOI/JSOI 2014 骑士游戏 题解

    题目传送门 题目大意: 有 n n n 种怪物,有两种攻击,物理攻击攻击完后,一个怪物会分裂成 R i R_i Ri​ 个给定的怪物(即便分裂出 0 0 0 个该怪物也视为未死亡),魔法攻击攻击完后, ...

  2. PWN-PRACTICE-BUUCTF-17

    PWN-PRACTICE-BUUCTF-17 hitcontraining_heapcreator wustctf2020_closed ciscn_2019_es_7 hitcon2014_stko ...

  3. C. Feast Coins(背包求方案数)

    ICPC Arab Collegiate Programming Contest 2014 C题 题解:转化为因子考虑,因为每一种选取相同的个数 #include <bits/stdc++.h& ...

  4. ZOJ Monthly, June 2014 月赛BCDEFGH题题解

    比赛链接:点击打开链接 上来先搞了f.c,,然后发现状态不正确,一下午都是脑洞大开,, 无脑wa,无脑ce...一样的错犯2次.. 硬着头皮搞了几发,最后20分钟码了一下G,不知道为什么把1直接当成不 ...

  5. Noip 2014酱油记+简要题解

    好吧,day2T1把d默认为1也是醉了,现在只能期待数据弱然后怒卡一等线吧QAQ Day0 第一次下午出发啊真是不错,才2小时左右就到了233,在车上把sao和fate补掉就到了= = 然后到宾馆之后 ...

  6. 北航校赛2014 预赛 题解

    比赛地址 第十届北航程序设计竞赛网络预赛 A. face the truth 题意: "差点儿全部队伍都通过了题目"的含义是"有超过一半的队伍过了题目".如今n ...

  7. 2014北邮计算机考研复试上机题解(上午+下午)

    据江湖传闻,2014年计算机机试分为了上午.下午两批. 先来看上午的题目. A.众数-计算机一2014 题目地址:A.众数-计算机一2014 直接统计即可. AC代码: #include<ios ...

  8. 寒假作业:COCI 2014/2015题选 题目与题解

    目录 T1 MAFIJA 题目 题解 T2 ZABAVA 题目 题解 T3 KAMP 题目 题解 T4 BOB 题目 题解 T5 SUMA 题目 题解 T6 NORMA 题目 题解 T7 COCI 题 ...

  9. 蓝桥杯2014年第五届C/C++ B组省赛习题题解

    目录 第一题:啤酒和饮料(枚举) 第二题:切面条(数学) 第三题:李白打酒(dfs) 第四题:史丰收速算 第五题:打印图形 第六题:奇怪的分式(枚举) 第七题:六角填数 第八题:蚂蚁感冒(数学) 第九 ...

最新文章

  1. [JavaME]手机申请移动分配的动态IP(3)?
  2. C#控制台程序,发送邮件,可带附件
  3. bool类型数组转换成一个整数_「PHP」常用的数组键值操作函数,面试重点
  4. DBUtils学习笔记
  5. 传递实体类对象_Java I/O 流之对象流中的序列化和反序列化
  6. dsu on tree(Educational Codeforces Round 2: E. Lomsat gelral)
  7. IDEA 这样配置注释模板,让你高出一个逼格!
  8. enq: HW - contention等待事件
  9. 计算机cpu基础知识ppt,计算机硬件基础知识ppt课件
  10. 大连理工大学c语言第三次上机作业答案,第一次上机作业参考答案
  11. python pyhook监听扫码_Python2.7:使用Pyhook模块监听鼠标键盘事件-获取坐标实例
  12. matlab实对称矩阵对角化,基于Matlab的实对称矩阵对角化
  13. 模电:集成运算放大器2
  14. VLAN Trunk
  15. 项目管理过程组-十五至尊图
  16. 将Ubuntu中文目录改为英文目录
  17. 老男孩Day1作业(二):三级菜单
  18. Flink - Watermark
  19. 计算机毕业设计之android的二手车交易系统app(源码+系统+mysql数据库+Lw文档)
  20. 长沙麻将APP(起手胡)

热门文章

  1. 微信小程序从开发到发布流程
  2. SWUST OJ#614求圆柱体的体积
  3. php字符截取长度(支持中文)限制标题字数时有用
  4. mysql 8介绍,MySQL 8.0 简介
  5. 单片机毕业设计 Stm32人体心率脉搏无线监测系统 - 嵌入式 物联网
  6. IE浏览器如何设置代理ip教程
  7. C语言变量类型转换之float与int互相转换
  8. IOC和DI 的区别
  9. 调节e18-d80nk的测量距离_水准仪、经纬仪、全站仪以及GPS测量使用教程,操作就是这么简单...
  10. 3、字节流与字符流的区别