ATcoderARC100D Equal Cut
ARC100 D - Equal Cut
Description: 给出长度为n的序列A,把这个序列分成连续的四段,最小化极差。
\(4≤n≤2×10^5,4≤n≤2×10^5\)
Solution:枚举中间的分割点,左右二分出极差最小的位置更新答案。
code:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
using namespace std;
const int MAXX=200010;
long long a[MAXX];
long long sum[MAXX];
int n;
long long ans=0x3f3f3f3f;
long long minnn1=0x3f3f3f3f;
long long maxxx1=0;
long long minnn2=0x3f3f3f3f;
long long maxxx2=0;
inline void solve(int L,int R,int v){
int l=L;
int r=R;
if(l>r)return ;
while(l+1<r){
int mid=(l+r)>>1;
if(sum[mid]-sum[L-1]>(sum[R]-sum[mid]))r=mid;
else l=mid;
}
if(v==1){
if(abs(sum[l]-sum[L-1]-(sum[R]-sum[l]))<abs(sum[r]-sum[L-1]-(sum[R]-sum[r]))){
minnn1=min(sum[l]-sum[L-1],sum[R]-sum[l]);
maxxx1=max(sum[l]-sum[L-1],sum[R]-sum[l]);
}
else {
minnn1=min(sum[r]-sum[L-1],sum[R]-sum[r]);
maxxx1=max(sum[r]-sum[L-1],sum[R]-sum[r]);
}
}
else {
if(abs(sum[l]-sum[L-1]-(sum[R]-sum[l]))<abs(sum[r]-sum[L-1]-(sum[R]-sum[r]))){
minnn2=min(sum[l]-sum[L-1],sum[R]-sum[l]);
maxxx2=max(sum[l]-sum[L-1],sum[R]-sum[l]);
}
else {
minnn2=min(sum[r]-sum[L-1],sum[R]-sum[r]);
maxxx2=max(sum[r]-sum[L-1],sum[R]-sum[r]);
}
}
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;++i){
cin>>a[i];
sum[i]=sum[i-1]+a[i];
}
for(int i=1;i<=n;++i){
if(i<2||n-i<2)continue;
minnn1=0x3f3f3f3f;
maxxx1=0;
minnn2=0x3f3f3f3f;
maxxx2=0;
solve(1,i,1);
solve(i+1,n,0);
ans=min(max(maxxx1,max(maxxx2,max(minnn1,minnn2)))-min(maxxx2,(min(maxxx1,min(minnn1,minnn2)))),ans);
}
cout<<ans;
return 0;
}
ATcoderARC100D Equal Cut的更多相关文章
- AtCoder Regular Contest 100 Equal Cut
Equal Cut 思路: 枚举中间那个分界点,然后两边找使得切割后差值最小的点,这个可以用双指针 代码: #include<bits/stdc++.h> using namespace ...
- Equal Cut
Equal Cut 题目描述 Snuke has an integer sequence A of length N. He will make three cuts in A and divide ...
- AtCoder Regular Contest 100 (ARC100) D - Equal Cut 二分
原文链接https://www.cnblogs.com/zhouzhendong/p/9251420.html 题目传送门 - ARC100D 题意 给你一个长度为 $n$ 的数列,请切 $3$ 刀, ...
- ARC-100 D - Equal Cut
题面在这里! 我们枚举一下第2和第3段的分界点,显然这种情况下 第1与第2 和 第3与第4 之间的分界点都只有两种情况可能最优,吧这四种情况讨论一下就好了. 两边的分界点可以单调扫过去... # ...
- ARC100D Equal Cut
传送门 分析 首先我们想到的肯定是n^3暴力枚举,但这显然不行.然后我们想到的就是二分了,但这题没有什么单调性,所以二分也不行.这时候我就想到了先枚举找出p2的位置再在它的左右两边找到p1和p3,但是 ...
- Hdu 3363 Ice-sugar Gourd(对称,圆)
Ice-sugar Gourd Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)T ...
- 【AtCoder】ARC100 题解
C - Linear Approximation 找出\(A_i - i\)的中位数作为\(b\)即可 题解 #include <iostream> #include <cstrin ...
- Hdu3363 Ice-sugar Gourd 2017-01-16 11:39 43人阅读 评论(0) 收藏
Ice-sugar Gourd Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- AtCoder Beginner Contest 102
A - Multiple of 2 and N Time Limit: 2 sec / Memory Limit: 1024 MB Score : 100100 points Problem Stat ...
随机推荐
- 为什么越来越少的开源项目使用 GPL 协议
原文出处: opensource 译文出处:oschina/王练 前段时间,我在 RedMonk 上看到了一篇来自 Stephen O’Grady 的有趣推文,介绍了开源许可证目前的状态,以 ...
- 推荐《SQL基础教程(第2版)》中文PDF+源代码+习题答案
我认为<SQL基础教程(第2版)>非常适合数据库学习的初学者.论述的角度是读者的角度,会换位思考到读者在看到这一段时候会发出怎样的疑问,非常难得:原始数据的例题只有一道,但是可以反复从不同 ...
- 使用PXE+NFS EFI引导安装RHEL6/7以及Kickstart安装
PXE引导的步骤: 1.开机后选择网络启动,client端向server端的dhcpd发起获取IP地址的dhcp请求. 2.server端分配IP后,dhcpd会同时根据其配置文件,通过TFTP协议发 ...
- 题解 P2504 【[HAOI2006]聪明的猴子】
这道题要坑死人啊... 第一次做40分,其他RE,改了一次之后就变成20分了... 究其原因,是有一个数组(dis)开的太小了,于是最后本蒟蒻就随手开了个五百万,然后,就AC了. 看到有一篇题解说求距 ...
- 怎么打开/查看MySQL的SQL记录
mysql在执行sql的时候会在日志当中记录很多信息,当然包括执行的所有语句.下面以使用navicat for mysql为例,来展示一下如何打开/查看MySQL的SQL记录: 打开navicat f ...
- java枚举在android项目应用
今天修复一个公司非常早曾经的android应用功能,里面的代码逻辑已经全然错乱,然后发现返回的数据全然不正确了.然后修复了整整两天.然后我又一次整理了一遍,重构就算不上了. 然后就用上了枚举. 什么是 ...
- android-Animation进阶(创造用户舒服的动画)
android中经常使用的动画有Animation ,Animator两种; ---第1种经常使用的是使用在Activity切换中.比方打开一个Activity.关闭一个Activity 个人比較喜欢 ...
- swust oj 2516 教练我想学算术 dp+组合计数
#include<stdio.h> #include<string.h> #include<iostream> #include<string> #in ...
- Android自定义组件系列【14】——Android5.0按钮波纹效果实现
今天任老师发表了一篇关于Android5.0中按钮按下的波纹效果实现<Android L中水波纹点击效果的实现>,出于好奇我下载了源代码看了一下效果,正好手边有一个Nexus手机,我结合实 ...
- vue 指令的用法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...