[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; }
posted @ 2018-05-02 21:00  NaVi_Awson  阅读(195)  评论(0编辑  收藏  举报