题解 | #E Problem#

A+B Problem

https://ac.nowcoder.com/acm/contest/120561/A

问题分析:

有一个包含 n 个方块的序列,每个方块上有一个数字。还有一个额外的万能方块,初始值为 k。

游戏规则:可以把万能方块插入到序列的最左边,同时最右边的方块会被移出序列,变成新的万能方块。可以执行任意多次操作(包括0次)。

目的:找到一个最优的操作次数,使得最终序列最左边的数字加上最终万能方块的数字的和最大。

总共有三种情况:操作0次,操作1次,操作两次及以上

1.如果不动,就是a[0]+k

2.如果动一次,就是a[n-1]+k

3.如果动两次及以上,就是相邻两个数的和

代码实现:

#include<bits/stdc++.h>

using namespace std;

int main() {

int T;
cin >> T;
for(int i=0;i<T;i++)
{
    int n,k;
    cin >> n >> k;
    vector<int>a(n);
    for(int j=0;j<n;j++)
    {
        cin >> a[j];
    }
    int numx=a[0]+k;
    numx=max(numx,a[n-1]+k);
    int num=-20000000;
    for(int j=1;j<n;j++)
    {
        num=max(num,a[j]+a[j-1]);
    }
    numx=max(numx,num);
    cout << numx << '\n';
}
return 0;

}

时间复杂度为O(n)

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务