zoukankan      html  css  js  c++  java
  • [BZOJ 5074]小B的数字

    Description

    题库链接

    给你一个长度为 (n) 的序列 (a_1,a_2,cdots,a_n) ,让你生成另一个序列 (b_1,b_2,cdots,b_n) ,使得 (forall iin [1,n],b_i=2^{k},kinmathbb{Z^*}) 并且对于 (forall iin [1,n],prodlimits_{j=1}^n b_j{largemid} b_i^{a_i})(T) 组询问,询问能否构造出这样的 (b)

    (1leq nleq 10^5,a_ileq 10, Tleq 10)

    Solution

    考虑让 (b_i=2^{c_i},c_iin mathbb{Z^*}) ,那么题设的条件就变为 (forall iin [1,n],2^{sumlimits_{j=1}^nc_j}{largemid} 2^{c_i imes a_i})

    [egin{equation}forall iin [1,n],sumlimits_{j=1}^nc_jleq c_i imes a_iend{equation}]

    容易发现将 (c_i) 整体扩大某个整数倍上述式子依旧成立。

    对于 ((1)) 式,变形为 (forall iin [1,n],frac{sumlimits_{j=1}^nc_j}{a_i}leq c_i)

    那么

    [egin{aligned}sum_{i=1}^nfrac{sumlimits_{j=1}^nc_j}{a_i}&leq sum_{i=1}^nc_i\sum_{i=1}^nfrac{1}{a_i}&leq 1end{aligned}]

    我们只要证明上述不等式是 ((1)) 式的充要条件即可。

    对于必要性,比较显然,因为 ((1)) 式成立的话,上述式子一定成立。

    证明充分性,假设上式不成立,那么 ((1)) 式一定不成立;假设上式子成立,我们考虑令 (c_i=frac{1}{a_i}) 那么两个式子就是相同的。

    由上述结论,我们可以构造这样的一组 (b_i=2^{c_i})(c_i=frac{1}{a_i})

    由之前的结论:将 (c_i) 整体扩大某个整数倍式子依旧成立。不妨让 (c_i) 乘上 ( ext{lcm}_{i=1}^n a_i) 那么得到解了。

    所以判断存在性,只需判断是否满足 (sumlimits_{i=1}^nfrac{1}{a_i}leq 1)

    Code

    #include <bits/stdc++.h>
    using namespace std;
    const int fac = 3628800;
    
    void work() {
        int n, x; long long s = 0; scanf("%d", &n);
        for (int i = 1; i <= n; i++) scanf("%d", &x), s += fac/x;
        puts(s <= fac ? "YES" : "NO");
    }
    int main() {int t; cin >> t; while (t--) work(); return 0; }
  • 相关阅读:
    【LeetCode】Validate Binary Search Tree
    【LeetCode】Search in Rotated Sorted Array II(转)
    【LeetCode】Search in Rotated Sorted Array
    【LeetCode】Set Matrix Zeroes
    【LeetCode】Sqrt(x) (转载)
    【LeetCode】Integer to Roman
    贪心算法
    【LeetCode】Best Time to Buy and Sell Stock III
    【LeetCode】Best Time to Buy and Sell Stock II
    CentOS 6 上安装 pip、setuptools
  • 原文地址:https://www.cnblogs.com/NaVi-Awson/p/8982278.html
Copyright © 2011-2022 走看看