zoukankan      html  css  js  c++  java
  • Four Segments CodeForces

    题目

    题意:sum(l,r)表示数列a中索引为l到r-1(都包含)的数之和(如果l==r则为0)。给出数列a,求合适的delim0delim1delim2,使res = sum(0, delim0) - sum(delim0, delim1) + sum(delim1, delim2) - sum(delim2, n)最大。

    方法:枚举delim1,扫一遍就可以求出此时能使res最大的delim0和delim2。记录res最大值。实现有一些细节,比如可以将res的计算公式化为前缀和的公式

    曾经错在:1.int会爆,没注意  2.输出了调试的时候输出的内容(ans)而不是dl0,dl1,dl2

     1 #include<cstdio>
     2 typedef long long LL;
     3 LL n,a[6000],dl1,dl0,dl2,t_max_dl0,t_max_dl2,max_dl0,max_dl2,t_ans,ans,max1,max_dl1;
     4 int main()
     5 {
     6     LL i,t1;
     7     scanf("%lld",&n);
     8     for(i=0;i<n;i++)
     9         scanf("%lld",&a[i]);
    10     for(dl1=0;dl1<n;dl1++)
    11     {
    12         t_ans=0;
    13         t1=0;
    14         for(i=0;i<dl1;i++)
    15             t1-=a[i];
    16         //此时表示dl0=0时sum(0,delim0)-sum(delim0,delim1)
    17         max1=t1;
    18         t_max_dl0=0;
    19         for(dl0=1;dl0<=dl1;dl0++)
    20         {
    21             t1+=2*a[dl0-1];
    22             if(t1>max1)
    23             {
    24                 max1=t1;
    25                 t_max_dl0=dl0;
    26             }
    27         }
    28         t_ans+=max1;
    29         t1=0;
    30         for(i=dl1;i<n;i++)
    31             t1-=a[i];
    32         //此时表示dl2=dl1时sum(delim1,delim2)-sum(delim2,n)
    33         max1=t1;
    34         t_max_dl2=dl1;
    35         for(dl2=dl1+1;dl2<=n;dl2++)
    36         {
    37             t1+=2*a[dl2-1];
    38             if(t1>max1)
    39             {
    40                 max1=t1;
    41                 t_max_dl2=dl2;
    42             }
    43         }
    44         t_ans+=max1;
    45         if(t_ans>ans)
    46         {
    47             max_dl0=t_max_dl0;
    48             max_dl1=dl1;
    49             max_dl2=t_max_dl2;
    50             ans=t_ans;
    51         }
    52     }
    53     printf("%lld %lld %lld",max_dl0,max_dl1,max_dl2);
    54     //printf("%lld",ans);
    55     return 0;
    56 }
    View Code

    暴力对拍程序:

     1 #include<cstdio>
     2 #include<algorithm>
     3 using namespace std;
     4 typedef long long LL;
     5 LL c[5010];
     6 LL n,m;
     7 LL res,max_res,a1,a2,a3;
     8 LL lowbit(LL x)
     9 {
    10     return x&-x;
    11 }
    12 void add(LL num,LL x)
    13 {
    14     while(num<=n)
    15     {
    16         c[num]+=x;
    17         num+=lowbit(num);
    18     }
    19 }
    20 LL sum1(LL x)
    21 {
    22     LL ans=0;
    23     while(x>0)
    24     {
    25         ans+=c[x];
    26         x-=lowbit(x);
    27     }
    28     return ans;
    29 }
    30 LL sum(LL l,LL r)
    31 {
    32     if(l>r)    return 0;
    33     return sum1(r)-sum1(l-1);
    34 }
    35 int main()
    36 {
    37     LL i,j,k,t;
    38     scanf("%lld",&n);
    39     for(i=1;i<=n;i++)
    40     {
    41         scanf("%lld",&t);
    42         add(i,t);
    43     }
    44     for(i=0;i<=n;i++)
    45         for(j=i;j<=n;j++)
    46             for(k=j;k<=n;k++)
    47             {
    48                 res=sum(1,i)-sum(i+1,j)+sum(j+1,k)-sum(k+1,n);
    49                 if(res>max_res)
    50                 {
    51                     max_res=res;
    52                     a1=i;a2=j;a3=k;
    53                 }
    54             }
    55     printf("%lld",max_res);
    56     return 0;
    57 }
    View Code
  • 相关阅读:
    JVM发生OOM调优
    行云创新完成B轮融资,阿里云独家投资
    行云创新直播回顾:DDD“爱”上Dapr
    如何通过Dapr快速实现DDD?
    通过Dapr快速落地DDD,实现高并发
    上K8s,研发团队如何从容一点?
    直播来了!等你围观!聊聊服务网格那些事儿
    服务网格出现流量故障该咋办?SolarMesh发布重大功能
    mysql 授权问题
    Centos Mysql5.7 安装
  • 原文地址:https://www.cnblogs.com/hehe54321/p/cf-846c.html
Copyright © 2011-2022 走看看