[BZOJ 5074]小B的数字

Description

题库链接

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

\(1\leq n\leq 10^5,a_i\leq 10, T\leq 10\)

Solution

考虑让 \(b_i=2^{c_i},c_i\in \mathbb{Z^*}\) ,那么题设的条件就变为 \(\forall i\in [1,n],2^{\sum\limits_{j=1}^nc_j}{\large\mid} 2^{c_i\times a_i}\)

\[\begin{equation}\forall i\in [1,n],\sum\limits_{j=1}^nc_j\leq c_i\times a_i\end{equation}\]

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

对于 \((1)\) 式,变形为 \(\forall i\in [1,n],\frac{\sum\limits_{j=1}^nc_j}{a_i}\leq c_i\)

那么

\[\begin{aligned}\sum_{i=1}^n\frac{\sum\limits_{j=1}^nc_j}{a_i}&\leq \sum_{i=1}^nc_i\\\sum_{i=1}^n\frac{1}{a_i}&\leq 1\end{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\) 乘上 \(\text{lcm}_{i=1}^n a_i\) 那么得到解了。

所以判断存在性,只需判断是否满足 \(\sum\limits_{i=1}^n\frac{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; }

转载于:https://www.cnblogs.com/NaVi-Awson/p/8982278.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值