[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; }