• [CF1305E] Kuroni and the Score Distribution


    [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();
        }
    }
    
  • 相关阅读:
    开启、关闭ubuntu防火墙
    python str byte 互转
    Java 获取系统cpu 内存
    Nginx 针对上游服务器缓存
    Nginx 返回响应过滤响应内容
    Nginx 如何处理上游响应的数据
    Linux 用户和用户组管理
    Linux 文件与目录管理
    Linux 文件与目录管理
    Linux 文件基本属性
  • 原文地址:https://www.cnblogs.com/mollnn/p/14361488.html
Copyright © 2020-2023  润新知