zoukankan      html  css  js  c++  java
  • 最大值(东方化改题+老师给的题解)

    题目描述

    ⑨有一本书,上面有很多有趣的OI问题。今天⑨看到了这么一道题目:

    这里有一个长度为n的正整数数列ai(下标为1~n)。并且有一个参数k。

    你需要找两个正整数x,y,使得x+k<=y,并且y+k-1<=n。并且要求ax+ax+1+…+ax+k-1+ay+ay+1+…+ay+k-1最大。

    ⑨并不会做,于是她把题扔给了你。

    输入格式(max.in)

        第一行两个数n,k。

        第二行n个数,表示ai

    输出格式(max.out)

    两个数表示x,y。若有很多种满足要求的答案,输出x最小的值,若x最小仍然还有很多种满足要求的答案,输出y最小的值。

    老师放的正解在这里↓

     1 #include <cmath>
     2 #include <cstdio>
     3 #include <cstdlib>
     4 #include <iostream>
     5 #include <algorithm>
     6 using namespace std;
     7 int n,m,a[200005],i,ansx,ansy;
     8 long long  sum[200005],MAX,MAX1[200005],MAX2[200005],x2[200005],x1[200005];
     9 int main()
    10 {
    11     freopen("max.in","r",stdin);
    12     freopen("max.out","w",stdout);
    13     scanf("%d%d",&n,&m);
    14     for (i=1; i<=n; i++) scanf("%d",&a[i]);
    15     for (i=1; i<=n; i++)
    16         sum[i]=sum[i-1]+(long long)a[i];
    17    // return 0;
    18     for (i=m; i<=n; i++)
    19     {
    20         //if (i%1000==0)cout<<i<<endl;
    21         if (MAX1[i-1]>=sum[i]-sum[i-m])
    22         {
    23             x1[i]=x1[i-1];
    24             MAX1[i]=MAX1[i-1];
    25         }
    26         else
    27         {
    28             x1[i]=i-m+1;
    29             MAX1[i]=sum[i]-sum[i-m];
    30         }
    31     }
    32     for (i=n-m+1; i>=1; i--)
    33     {
    34         if (MAX2[i+1]>sum[i+m-1]-sum[i-1])
    35         {
    36             x2[i]=x2[i+1];
    37             MAX2[i]=MAX2[i+1];
    38         }
    39         else
    40         {
    41             x2[i]=i;
    42             MAX2[i]=sum[i+m-1]-sum[i-1];
    43         }
    44     }
    45     for (i=m; i<=n-m; i++)
    46     {
    47         if (MAX1[i]+MAX2[i+1]>MAX)
    48         {
    49             MAX=MAX1[i]+MAX2[i+1];
    50             ansx=x1[i]; ansy=x2[i+1];
    51         }
    52     }
    53     printf("%d %d
    ",ansx,ansy);
    54     return 0;
    55 }

    全场最佳:我画的图片(

  • 相关阅读:
    C++ 线程的创建、挂起、唤醒和结束 &&&& 利用waitForSingleObject 函数陷入死锁的问题解决
    接收数据界面卡顿-----待整理
    vs2012 在调试或运行的过程中不能加断点
    matlab 学习笔记
    周立功USBCAN-II 上位机开发(MFC)
    vs添加静态链接库+添加动态链接库+添加头文件目录
    Go 面试每天一篇(第 2 天)
    http 协议
    Samba配置
    svn checkout 单个文件
  • 原文地址:https://www.cnblogs.com/aristocrat/p/8463346.html
Copyright © 2011-2022 走看看