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 ...
随机推荐
- UI Framework-1: Aura Overview
Aura Overview From the perspective of the user, Aura provides Window and Event types, as well as a ...
- bzoj5085: 最大 暴力 二分
Code: #include<cstdio> #include<algorithm> #include<cstring> #include<iostream& ...
- c3p0-config.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE xml> <c3p0-confi ...
- Azure 配置高可用的准备系列工作-建立不同区域的存储账户和建立网络!
我们谈到我们的业务,常常谈到一个词.三层架构,就是我们的UI层.数据訪问层和数据存储层的分离,通常情况下我们的业务高可用必须满足这三层的所有高可用的情况下才干达到最高级别的高可用. 那么谈到Az ...
- ubuntu 下安装eclipse &java环境配置
前面有一篇的博客写的是ubuntu下安装eclipse和java环境的配置.当时是安装网上的攻略进行的 ,当然也是能够成功的. 近期把那台电脑送人了 ,仅仅好在自己的这台电脑上又一次安装一次了 ,唯一 ...
- 128.C++文件操作小结
打开后缀参数 #include <fstream> #include <iostream> using namespace std; //文本读写 //文件写入 void ma ...
- Python(八) 正则表达式与JSON
一.初识正则表达式 正则表达式 是一个特殊的字符序列,一个字符串是否与我们所设定的这样的字符序列,相匹配 快速检索文本.实现替换文本的操作 json(xml) 轻量级 web 数据交换格式 impor ...
- Coderfroces 862 B . Mahmoud and Ehab and the bipartiteness
Mahmoud and Ehab and the bipartiteness Mahmoud and Ehab continue their adventures! As everybody in ...
- SQLServer 查询最近一天,三天,一周,一月,一季度数据的方法
三天 select * from T_news where datediff(day,addtime,getdate())<= 2 and datediff(day,addtime,getdat ...
- Vuejs2.0构建一个彩票查询WebAPP(2)
一,Vuex的使用 import Vue from 'vue' import Vuex from 'vuex' import MsgModules from './MsgModules' Vue.us ...