zoukankan      html  css  js  c++  java
  • [CF1478C] Nezzar and Symmetric Array

    [CF1478C] Nezzar and Symmetric Array - 构造

    Description

    给出一个长度为 (2n) 的数组,问是否存在一个满足条件的 (a) 数组,其中的元素按相反数成对出现,并且满足给出的 (d) 数组(di 表示 ai 与 a 中每个元素之差的绝对值之和)。((1≤n≤10^5,0≤d_i≤10^{12})

    Solution

    考虑从外向内逐层构造

    对于内层来说,外面每一层 j 的贡献都是 2aj,减掉这一部分后,剩下的又相当于一个新的外层,利用 an=dn/n 计算出 an

    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long
    
    void solve()
    {
        int n;
        cin >> n;
    
        vector<int> d(n * 2);
        for (int i = 0; i < n * 2; i++)
            cin >> d[i];
    
        sort(d.begin(), d.end());
    
        vector<int> e;
        e.push_back(0);
        for (int i = n * 2 - 2; i >= 0; i -= 2)
        {
            if (d[i] == d[i + 1])
            {
                e.push_back(d[i]);
            }
            else
            {
                cout << "NO" << endl;
                return;
            }
        }
    
        d = e;
    
        vector<int> a(n + 2);
        int s = 0;
        for (int i = 1; i <= n; i++)
        {
            if (d[i] - s <= 0 || (d[i] - s) % (2 * (n - i + 1)))
            {
                cout << "NO" << endl;
                return;
            }
            a[i] = (d[i] - s) / (2 * (n - i + 1));
            if (a[i] == a[i - 1])
            {
                cout << "NO" << endl;
                return;
            }
            s += 2 * a[i];
        }
        cout << "YES" << endl;
    }
    
    signed main()
    {
        ios::sync_with_stdio(false);
    
        int t;
        cin >> t;
    
        while (t--)
        {
            solve();
        }
    }
    
  • 相关阅读:
    常见时间复杂度及对应关系
    【转载】Locust实现集合点
    curl 查看接口的网络分段响应时间
    python-字符串操作分类小结
    Jquery--1--选择器分类
    【转】linux shell编程实例总结
    随笔分类整理
    linux备忘录-日志档案
    linux备忘录-系统服务daemon
    linux备忘录-程序管理与SELinux
  • 原文地址:https://www.cnblogs.com/mollnn/p/14459717.html
Copyright © 2011-2022 走看看