• [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; }
  • 相关阅读:
    Iptables 之二扩展模块 nat
    sudo 命令
    7、CentOS6 编译安装
    MySQL5.7 基础之二 DCL DML
    SQL Server 2008R2安装
    6、httpd2.4 编译安装LAMP
    MySQL 基础之一
    gulp
    msbuild
    inno setup
  • 原文地址:https://www.cnblogs.com/NaVi-Awson/p/8982278.html
Copyright © 2020-2023  润新知