zoukankan      html  css  js  c++  java
  • [CF1468H] K and Medians

    [CF1468H] K and Medians - 思维

    Description

    给定奇数 k 和长度为 n,m 的序列 a,b,序列 a 是 1..n,序列 b 是单调不降的序列。现在可以进行零次或若干次操作,每次操作从 a 中选择 k 个整数,只保留中位数而删除其他数。问是否能做成序列 b。

    Solution

    每次操作可以消去 k-1 个数,所以 (n-m) mod (k-1) != 0 的情况必然是无解的

    消去的最后一步,必然是以 b 序列中的某一元素为中位数进行的

    因此我们得到一个必要条件:存在 i,对这个 bi,a 中 bi 的两侧各有 k/2 个不在 b 序列中的数

    但前面删除的数是任意的,所以只要满足上述条件,我们就可以在保持上述条件成立的情况下,不断减小数的个数,因此这个条件也是充分的

    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long
    
    void solve()
    {
        int n, k, m;
        cin >> n >> k >> m;
        vector<int> b(m + 2);
        for (int i = 1; i <= m; i++)
            cin >> b[i];
        if ((n - m) % (k - 1))
        {
            cout << "NO" << endl;
        }
        else
        {
            for (int i = 1; i <= m; i++)
            {
                if (b[i] - i >= k / 2 && n - b[i] - m + i >= k / 2)
                {
                    cout << "YES" << endl;
                    return;
                }
            }
            cout << "NO" << endl;
        }
    }
    
    signed main()
    {
        ios::sync_with_stdio(false);
        int t;
        cin >> t;
        while (t--)
            solve();
    }
    
  • 相关阅读:
    组件映射
    联合主键关联
    一对一单向双向主键关联
    7函数
    forEach与map
    3运算符与表达式
    作用域声明提升
    php程序设计 1,2章节
    angularJs(3)过滤器
    angularJs(1)指令篇
  • 原文地址:https://www.cnblogs.com/mollnn/p/14399908.html
Copyright © 2011-2022 走看看