100D Equal Cut

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了100D Equal Cut相关的知识,希望对你有一定的参考价值。

?????????stack   target   const   ????????????   ret   ??????   tco   end   cin   

?????????

??????

??????????????????????????????n^3???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????p2???????????????????????????????????????p1???p3????????????????????????2??????????????????????????????????????????p2????????????????????????????????????????????????????????????????????????p2???????????????????????????p1???p3?????????????????????p1???p3?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????p1+1????????????????????????p1?????????p1+2???????????????????????????????????????????????????????????????????????????O(n)?????????

??????

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<ctime>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
#define sp cout<<"---------------------------------------------------"<<endl
const long long inf=2e15+7;
long long pre[200010]; 
int main(){
      long long n,i,x,p1,p2,p3,minn,P;
      cin>>n;
      for(i=1;i<=n;i++){
          scanf("%lld",&x);
          pre[i]=pre[i-1]+x;
      }
      p1=1,p2=2,p3=3;
      long long ans=inf;
      for(p2;p2<n;p2++){
        minn=inf;
        for(i=p1;i<p2;i++)
          if(abs(pre[i]-(pre[p2]-pre[i]))<minn){
            minn=abs(pre[i]-(pre[p2]-pre[i]));
            p1=i;
          }else break;
        minn=inf;
        if(p3<=p2)p3=p2+1;
        for(i=p3;i<=n;i++)
          if(abs((pre[i]-pre[p2])-(pre[n]-pre[i]))<minn){
            minn=abs((pre[i]-pre[p2])-(pre[n]-pre[i]));
            p3=i;
          }else break;
        minn=inf;long long maxn=0;
        minn=min(pre[p1],min(pre[p2]-pre[p1],min(pre[p3]-pre[p2],pre[n]-pre[p3])));
        maxn=max(pre[p1],max(pre[p2]-pre[p1],max(pre[p3]-pre[p2],pre[n]-pre[p3])));
        ans=min(ans,maxn-minn);
      }
      cout<<ans<<endl;
      return 0;
}

以上是关于100D Equal Cut的主要内容,如果未能解决你的问题,请参考以下文章

Equal Cut

ARC100 D - Equal Cut

AtCoder Regular Contest 100 (ARC100) D - Equal Cut 二分

leetcode_1292. Maximum Side Length of a Square with Sum Less than or Equal to Threshold_[二维前缀和](代码片段

非常简短的片段:PHP word cut

Final Cut Pro X中的音视频片段如何自由拖动?