D题求hack数据

如题,自己测了半个小时了,通过率一直卡在96%,实在测不出来了。

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <vector>
#include <unordered_map>
#include <map>
#include <iomanip>
#include <queue>

using namespace std;

typedef long long LL;
typedef pair<int, int> PII;

int dx[4] = { -1, 1, 0, 0 };
int dy[4] = { 0, 0, -1, 1 };

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    LL n, k;
    cin >> n >> k;
    vector<LL> a(n + 2);
    for (int i = 1; i <= n; ++i) cin >> a[i];
    
	// 假设最大能抽到x,有(0+1+2+...+x)<(k+x+1),化简得(k-2)*(k+1)<2*k
    // 不能相等
    LL l = 1, r = n - 1;
    while (l < r)
    {
        LL mid = (l + r + 1) / 2;
        if ((mid - 2) * (mid + 1) < 2 * k) l = mid;
        else r = mid - 1;
    }
    LL x = l + 1;

    vector<LL> preSum(n + 2);
    vector<LL> sufSum(n + 2);

    LL sum = 0;
    for (int i = 1; i <= n; ++i)
    {
        sum += a[i];
        preSum[i] = max(preSum[i - 1], sum);
    }
    sum = 0;
    for (int i = n; i >= 1; --i)
    {
        sum += a[i];
        sufSum[i] = max(sufSum[i + 1], sum);
    }

    LL ans = 0;
    for (int i = 0; i <= x; ++i)
    {
        ans = max(ans, preSum[i] + sufSum[n - x + 1 + i]);
    }
    cout << ans << '\n';
    return 0;
}

感觉代码还是比较简洁的

全部评论
两头取得个数 加起来,可以不是 cycle数吧! 样例的数据 也提到了 这个点
1 回复 分享
发布于 04-12 00:11 广东
x的值有问题,我用了我的求法以后就a掉了 LL n, k;     cin >> n >> k;     vector<LL> a(n + 2);     for (int i = 1; i <= n; ++i) cin >> a[i];     LL cnt = 0, ci = 0;     for(LL i = 1; i <= n; i ++){         if(k >= ci)         {             k -= ci;             k++;             cnt++;             ci++;         }         else             break;     }     LL x = cnt; 那部分代码
点赞 回复 分享
发布于 04-11 23:52 陕西

相关推荐

真的很糟糕:欲哭无泪
点赞 评论 收藏
分享
机械打工仔:我来告诉你原因,是因为sobb有在线简历,有些HR为了快会直接先看在线简历,初步感觉不合适就不会找你要详细的了
投了多少份简历才上岸
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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