JOI 君马上要和妹妹 JOI 子和 JOI 美一起吃小吃。今天的小吃是他们三个人都很喜欢的年轮蛋糕。

年轮蛋糕是像下图一样呈圆筒形的蛋糕。为了把蛋糕分给三个人,JOI 君必须沿着半径方向切 3 刀,从而把蛋糕分成三块。然而,由于年轮蛋糕硬得像实木一样,要让刀切进去并不简单。因此,这个年轮蛋糕上事先准备了 N 个切口,而 JOI 君只能在有切口的位置下刀。切口按顺时针顺序编号为 1到 N,对于 1≤i≤N−1,第 i 个切口和第 i+1个切口之间部分的大小是 Ai。第 N 个切口和第 1个切口之间部分的大小是 AN ​​。

图 1:一个年轮蛋糕的例子,N=6,A1=1,A2=5,A3=4,A4=5,A5=2,A6=4

妹控的 JOI 君在把蛋糕切成 3 块之后,自己选走最小的一块吃掉,把剩下两块分给两个妹妹。而另一方面,JOI 君太喜欢年轮蛋糕了,只要能吃到的时候就会想吃很多很多。试求:最小块的大小不超过多少。

样例说明 1


图 2:从第 1,3,5个切口下刀时是最优解(即图中粗实线位置)。

这道题用二分+二分。我们知道分一个蛋糕需要切三刀,第一刀枚举O(n),第二刀二分logN,第三刀二分logN,一共O(nlogn^2),可以过。

第一、二刀会把最小的一块给切走,然后留下一大块。

然后用第三刀切这一大块,如果这两块切完都比刚才切走的小,说明这一大块无论怎么切都切不出符合的结果,所以开始的一块切大了,第二刀往小切

如果前面一块小于刚切走的,说明第三刀要往后切;

如果后面一块小了,就往前切;

如果两块都可以,说明这种切法可行,第二刀尝试往更大的切。

注意所有数组下表的处理。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstdlib>
#include <cstring>
#include <stack>
#define in(a) a=read()
#define MAXN 200020
#define REP(i,k,n) for(long long i=k;i<=n;i++)
using namespace std;
inline long long read(){long long x=0,f=1;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-1;for(;isdigit(ch);ch=getchar())x=x*10+ch-'0';return x*f;
}
long long n;
long long ans;
long long a[MAXN],s[MAXN];
inline bool check(long long i,long long k){long long sum=s[i+k-1]-s[i-1];long long loc=i+k-1;long long left=0,right=n;while(right-left>1){long long mid=(right+left)/2;if(s[loc+mid]-s[loc]<sum && s[i+n-1]-s[loc+mid]<sum)  return 0;if(s[loc+mid]-s[loc]<sum)  left=mid;if(s[i+n-1]-s[loc+mid]<sum)  right=mid;if(s[loc+mid]-s[loc]>=sum && s[i+n-1]-s[loc+mid]>=sum)  return 1;}return 0;
}
int main(){in(n);REP(i,1,n){in(a[i]);a[i+n]=a[i];s[i]=s[i-1]+a[i];}REP(i,1,n)s[i+n]=s[i+n-1]+a[i+n];REP(i,1,n){long long left=0,right=n;while(right-left>1){long long mid=(left+right)/2;if(check(i,mid))  left=mid;else  right=mid;}ans=max(s[i+left-1]-s[i-1],ans);}cout<<ans;return 0;
}

转载于:https://www.cnblogs.com/jason2003/p/9737402.html

LOJ2758 年轮蛋糕相关推荐

  1. 年轮蛋糕JOI2014Final

    JOI 君马上要和妹妹 JOI 子和 JOI 美一起吃小吃.今天的小吃是他们三个人都很喜欢的年轮蛋糕. 年轮蛋糕是像下图一样呈圆筒形的蛋糕.为了把蛋糕分给三个人,JOI 君必须沿着半径方向切 3 刀, ...

  2. 【2018.10.1】「JOI 2014 Final」年轮蛋糕

    题面 一看到求"最小值的最大值"这种问题,就能想到二分了. 二分答案,然后我们要把一圈分成三块,使这三块的大小都$\geq mid$.做法是把环展开成2倍长度的链,先钦定一个起点, ...

  3. 让味蕾动起来的蛋糕甜点

    松软的面包.顺滑的奶油,唯美的巧克力,淡淡的果香.一口咬下去的松软.甜蜜都令我们回味无穷,再加上一杯鲜奶冲泡的咖啡,浓郁的香气,所有的疲惫与不悦都烟消云散.快来和烟台婚纱摄影一起来看看这些让味蕾动起来 ...

  4. 南京美食,为吃遍天下做准备~~

    /标点美食地址: 1. 羊肉泡馍:长白街348号有家"老陕家"面馆.郑和公园北面: 肉加馍. 2. 蓝空饭店:三条巷那边,稻香鸭.红烧老鹅.韭香脆皮鸡!.是很好的还有一个叫什么 牛 ...

  5. 2004年南京美食地图 [转载]

    一.[中餐] 1.金陵人山西路37号,TEL:83328484.83324869.鼓楼区委斜对过,笋干烧鸭胗, 辣子鸡.海派醉花生.优惠:海瓜子1元/斤(每桌),生蚝3元/只. 2.张生记酒店中山东路 ...

  6. 【HDU 2612 Find a Way(BFS)】(兼BFS入门笔记)

    [HDU 2612 Find a Way(BFS)](兼BFS入门笔记) 原题入口: http://acm.hdu.edu.cn/showproblem.php?pid=2612 第一篇在CSDN的博 ...

  7. 仁者乐山,智者乐水,吃货乐在北海道~

    2019独角兽企业重金招聘Python工程师标准>>> 冬季去北海道滑雪.泡汤,怎能少了美食相伴!北海道美食云集,日本其他地方常见的料理菜式在这里都能见到,同时,由于拥有得天独厚的食 ...

  8. 如何创建一个自己的npm包,并且上传到npm官网上

    1.首先先新建一个文件夹,文件夹的名字就是我们包的名字 cmd命令 2.然后再mynpm里新建一个index.js,内容是我们包的内容 module.exports={eat:function(){v ...

  9. 【拉斯观测组联翻】川原砾 Sword Art Online 27 Unital Ring Ⅵ

    ========================================== Sword Art Online 27 Unital Ring VI 電撃文庫 ================= ...

最新文章

  1. 技术图文:字典技术在求解算法题中的应用
  2. Cocoon的sitemap详解
  3. lettuce webdriver 自动化测试---玩转BDD
  4. 8天学通MongoDB——第四天 索引操作
  5. mysql通配符查询 性能_使用mysql5.7新特性解决前通配符查询性能问题
  6. WebRTC 的 log 系统实现分析
  7. leetcode 995. K 连续位的最小翻转次数(贪心算法)
  8. mastercam加工报表生成_听说最厉害的工程师才敢这样玩五轴加工?
  9. 电脑广告弹窗多?安利一下:程序员常用 7 款Chrome去广告插件
  10. html打印代码_惊呆了,我的 Python 代码里面出现了薛定谔的 Bug
  11. 安装GPUtil包过程
  12. docker 系列 - 基础镜像环境和Docker常用命令整理
  13. 机器学习 神经网络 神经元_神经网络如何学习?
  14. cass连接复合线命令 lisp_在cass中如何使两个多段线合为一条
  15. 在登陆Fedora 9时选择语言
  16. 信用卡积分兑换里程全攻略
  17. Julia学习笔记:使用GLM包进行一元回归分析及模型拟合度检验
  18. 【MATLAB appdesigner】23_如何通过回调函数来实现“键盘操作”?
  19. AD域创建及加入域的办法
  20. 示波器中的Trigger

热门文章

  1. 实时即未来,车联网项目之电子围栏分析【六】
  2. go语言基础-----06-----匿名字段、同名字段
  3. 2018年爬虫代理IP提供商对比
  4. 【安卓基础】基于Android Studio的家庭理财通项目
  5. 180209 逆向-Frida-python on win多进程BUG(曲线救国)
  6. PCB是什么?你真的足够了解PCB吗?
  7. 这 10 种 MySQL 经典错误案例,99% 的程序员一定遇到过!你呢?
  8. 120亿光年外发现大量水:为地球储量140万亿倍
  9. bertram_Bertram是什么意思
  10. 变电站ZRR-9000综合自动化系统的应用