求调,超时27分

题目总版

Newdon @ 2024-11-06 09:25:36

2020GCOI五年级 第六题 收集数据

题目描述

幼儿园的N名(N为偶数)小朋友们排成一列,每个人手中都拿有一个数据fi,两位老师分别站在队首和队尾。一个从队首往中间走,一位从队尾往中间走,他们俩走的节奏始终一致,直到相遇为止。在行进的过程中,他们每人可以收集连续K个小朋友手上的数据,但必顺在同一时刻开始,同一时刻结束。求这个过程被收集的数据之和最大可能是多少。

输入

输入为数据有两行。

第一行是两个整数N和K,其中N为小朋友的人数, K为两位老师可以收集的连续的数据的个数。 第二行有N正整数,依次给出每个小朋友手中的数据fi。

输出

输出为一行,是一个整数,为被收集的小朋友手中数据之和的最大值。

代码:

#include<bits/stdc++.h>
using namespace std;
int n,k,a[1000005],maxx1=-100,maxx2=-100,sum1,sum2;
int main(){
    scanf("%d%d",&n,&k);
    for(int i=1;i<=n;i++)scanf("%d",&a[i]);
    for(int i=1;i<=n/2-k+1;i++){
        for(int j=i;j<=k+i-1;j++)sum1+=a[j];
        if(sum1>maxx1)maxx1=sum1;
        sum1=0;
    }
    for(int i=n/2+1;i<=n-k+1;i++){
        for(int j=i;j<=k+i-1;j++)sum2+=a[j];
        if(sum2>maxx2)maxx2=sum2;
        sum2=0;
    }
    maxx1+=maxx2;
    printf("%d",maxx1);
    return 0;
}

by c22j33c43 @ 2024-11-06 09:44:14

要不试试分别求前半部分的前缀和和后半部分的倒着的前缀和,枚举1~n/2中k个的情况


by c22j33c43 @ 2024-11-06 09:45:16

别暴力了


by djc2012 @ 2024-11-06 13:02:15

用双指针


by Newdon @ 2024-11-06 16:05:30

@c22j33c43

能不能发一下代码


by Newdon @ 2024-11-06 16:05:52

@djc2012

能不能发一下代码


by Newdon @ 2024-11-06 16:17:38

发代码果子冲叫你爸爸


by c22j33c43 @ 2024-11-06 16:19:38

@HRZ_2012 我先做看看


by c22j33c43 @ 2024-11-06 16:23:02

@HRZ_2012 。。。。。数据范围发一下,不然我怎么做?


by Newdon @ 2024-11-06 16:27:26

@c22j33c43

【数据范围】

30%的数据 1≤ N ≤100 , k ≤ N/2 ,0≤ fi ≤1000。

60%的数据 1 ≤ N ≤10000, k ≤ N/2 ,0≤ fi ≤1000 。

100%的数据 1≤N≤1000000,且为偶数。K ≤ n/2 ,0≤ fi ≤1000 。


by c22j33c43 @ 2024-11-06 16:33:36

还有样例


| 下一页