首页 > 其他 > 详细

[CF1305E] Kuroni and the Score Distribution - 构造

时间:2021-02-02 14:57:44      阅读:24      评论:0      收藏:0      [点我收藏+]

[CF1305E] Kuroni and the Score Distribution - 构造

Description

构造一个长度为 n 的,数字不超过 1e9 的,单调递增的,恰好有 m 个满足 \(i<j<k\)\(a_i +a_j=a_k\) 的三元组 \((i,j,k)\) 的序列。

Solution

要想让三元组个数最多,显然我们会按照 1,2,3,... 这样的方式构造。

注意在这个过程中,第 k 个元素(新加入)产生的贡献为 \((k-1)/2\)

如果我们想要添加的贡献不到 \((k-1)/2\),假设为 \((k-1)/2-x\),那么我们可以添加一个 \(k+2x\) 的元素。

按照以上的方法构造出的序列显然是最短的。

考虑如何补齐 n 个元素,我们可以从 1e9 向下抓若干个元素填在最后。

#include <bits/stdc++.h>
using namespace std;

#define int long long

signed main()
{
    ios::sync_with_stdio(false);

    int n, m;
    cin >> n >> m;
    stringstream sout;
    int k = 0;
    while (m && n)
    {
        n--;
        ++k;
        int cur = min(m, (k - 1) / 2);
        if (cur < (k - 1) / 2)
            k += 2 * ((k - 1) / 2 - m);
        m -= cur;
        sout << k << " ";
    }
    while (n--)
    {
        sout << (int)(1e9 - n * k - n) << " ";
    }
    if (m)
    {
        cout << -1;
    }
    else
    {
        cout << sout.str();
    }
}

[CF1305E] Kuroni and the Score Distribution - 构造

原文:https://www.cnblogs.com/mollnn/p/14361488.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!