yzoj 2372 小B的数字 题解
题意
判断是否存在一个序列 $ b_i $ 使得 $ \prod_{i = 1}^{n} b_i \ | b_i^{a_i}$ 恒成立,其中 $ b_i $ 中的每个数都是2的正整数次幂。
样例输入
3
2
3 2
3
3 3 3
2
1 10
样例输出
YES
YES
NO
数据范围
对于 100% 的数据有 $ n \leq 10^5,a_i \leq 10,T \leq 10$
解析
首先拿到这道题,考场一看就知道不是规律题就是数学公式题,事实上是的。
我们可以设 $ b_i=2^{x_i} $ 其中 $ x_i \(为正整数,\) lcm(a_1,a_2,a_3....a_n)=LCM $ , $ sum=\sum_{i = 0}^{n} x_i\ $。
那么我们可以将原式子化为 $ 2^{sum} | 2^{x_i * a_i} $,显然要使此式恒成立,就要满足 $ a_i * x_i \geq sum $.

此式子可以转化为 $ lcm* x_i \geq sum* \frac{lcm}{a_i} $

左右两边相加可得
$ lcm* sum \geq sum * ( \sum_{i = 1}^{n} {\frac{lcm}{a_i}}\ )$
即 $ lcm \geq ( \sum_{i = 1}^{n} {\frac{lcm}{a_i}}\ )$
两边提出 $ lcm $约去得到 $ 1 \geq ( \sum_{i = 1}^{n} {\frac{1}{a_i}}\ )$
那么我们可以得出最终公式就是 $ ( \sum_{i = 1}^{n} {\frac{1}{a_i}}\ \leq 1) $
如果我们直接同分比较,很显然会超数据范围。
对于这一题,由于涉及倒数,会产生浮点误差,我们有三种方法去处理
方法一(不推荐
在最终判断的时候设置精度进行调控
#include<bits/stdc++.h>
using namespace std;
const double eps=1e-6;
int T,n,k;
bool cheak(double a,double b){
if(a-b<=eps) return true;
else return false;
}
int main(){
scanf("%d",&T);
while(T--){
scanf("%d",&n);
double sum=0;
for(int i=1;i<=n;++i){
scanf("%d",&k);
sum+=1.0/(double)k;
}
if(cheak(sum,(double)1)) printf("YES\n");
else printf("NO\n");
}
return 0;
}
方法二(正解
我们可以观察数据,可以知道 $ a_i \leq 10 $ 我们最终得到得式子也只与 $ a_i $ 得倒数有关,所以我们可以将式子改造,左右两边乘以 $ 10! $,也就是
$ ( \sum_{i = 1}^{n} {\frac{10!}{a_i}}\ \leq 10!) $
于是运算便变为了整数运算,便不存在浮点误差了!(常用技巧)
#include <iostream>
#include <cstdlib>
#include <cstdio>
using namespace std;
typedef long long ll;
int main(){
int t;
scanf("%d",&t);
while (t--){
int n;
scanf("%d",&n);
ll tot=0;
for(int i=0;i<n;i++){
int x;
scanf("%d",&x);
tot+=3628800/x;
}
puts(tot<=3628800 ? "YES" : "NO");
}
return 0;
}
方法三(巧妙的暴力
分析式子 $ ( \sum_{i = 1}^{n} {\frac{1}{a_i}}\ \leq 1) $ 我们可以发现如果 $ n > max(a_i) $ 那么这个式子必然不成立,所以我们可以把n的范围缩小到 $ max(a_i) $ 以内,那么我们通分就不会超出范围了于是便有了一个愉快的暴力
#include<bits/stdc++.h>
using namespace std;
int main(){
int t;
scanf("%d",&t);
while (t--){
int n;bool flag=1;
scanf("%d",&n);
long long tot=0;
long long pop=1;
int maxn=0;
for(int i=1;i<=n;i++){
int x;
scanf("%d",&x);
maxn=max(maxn,x);
if(x==1) flag=0;
tot+=x;
pop*=x;
}
if(!flag || n>maxn) printf("NO\n");
else puts(tot<=pop ? "YES" : "NO");
}
return 0;
}
yzoj 2372 小B的数字 题解的更多相关文章
- yzoj2424 小迟的数字 题解
题意:如果一个数字用十进制表示,有大于等于1个1,或者大于等于2个2,或者大于等于3个3,或者大于等于4个4,或者大于等于5个5,或者大于等于6个6,或者大于等于7个7,或者大于等于8个8,或者大于等 ...
- 【BZOJ5074】[Lydsy十月月赛]小B的数字 数学
[BZOJ5074][Lydsy十月月赛]小B的数字 题解:题目是问你ai*bi>=sum,bi>=0这个不等式组有没有解.因为a<=10,容易想到取ai的lcm,然后变成lcm*b ...
- 【BZOJ5071】[Lydsy十月月赛]小A的数字 发现性质
[BZOJ5071][Lydsy十月月赛]小A的数字 题解:一般遇到这种奇奇怪怪的操作,常用的套路是将原序列差分一下,或者求个前缀和什么的.本题就是直接对原序列求前缀和,然后发现一次操作相当于交换两个 ...
- 小Z的袜子(题解)(莫队)
小Z的袜子(题解)(莫队) Junlier良心莫队 题目 luoguP1494 [国家集训队]小Z的袜子 code #include<bits/stdc++.h> #define lst ...
- 小B的询问(题解)(莫队)
小B的询问(题解)(莫队) Junlier良心莫队 题目 luoguP2709 小B的询问 code #include<bits/stdc++.h> #define lst long lo ...
- 题解 P4942 【小凯的数字】
题目 为什么看到很多题解区的 dalao 都用逆元?是我太菜了吧 [分析] 首先,根据弃九验算法的原理,显然可以得到:一个 \(n\) 位数 \(a_1a_2a_3\dots a_n\equiv a_ ...
- [洛谷P4942][题解]小凯的数字
这题打着高精的旗号其实是闹着玩的……(我不是题目) 数据范围就是提示你这题O(1)的 我们知道,一个数膜9的余数等于它数字和膜9的余数 我们可以把l到r加起来然后膜9 也就是(l+r)(r-l+1)/ ...
- [BZOJ 5071]小A的数字
Description 小A成为了一个数学家,他有一串数字A1,A2...An 每次可以进行如下操作,选择一个数字i(1<i<=n),将(Ai-1,Ai,Ai+1) 变为(Ai-1 + A ...
- 小Z的袜子 题解报告【莫队】
Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命-- 具体来说,小Z把这N只 ...
随机推荐
- cc2530单片机的第一次实验,流水灯
第一个实验:控制流水灯 P1_0,P1_1,P0_4都连接在发光二极管的负极,所以,当这三个引脚为低电平,也就是0的时候,相应的发光二极管才会亮. 其实这里可以稍微的关注一下寄存器的地址,然后,编程的 ...
- 寄存器,移位寄存器的电路原理以及verilog代码实现
寄存器:用以存放二进制代码的电路,下图为由维特阻塞D触发器组成的4位数码寄存器: 逻辑功能分析: 1.异步端CR置0时,输出置0: 2.同步并行置数:D0~D3为4个输入代码,当CP上升沿到达时,D0 ...
- Problem 1 珠江夜游 (cruise .cpp)———2019.10.6
Problem 1 珠江夜游 (cruise.cpp)[题目描述]小 Z 放假后难得来一趟广州游玩,当然要吃遍广州各路美食小吃然后再到珠江新城看看远近闻名的小蛮腰啦!可当小 Z 一路吃吃吃以后,天渐渐 ...
- 【数论】[因数个数]P4167樱花
题目描述 求不定方程 \(\frac {1}{x} + \frac{1}{y} = \frac{1}{n!}\)的正整数解的个数 \(n \leq 100^6\) Solution 化简得 \(x * ...
- 轮播模仿臭美APP,vue,swiper
介绍:轮播使用了swiper,重要用于移动端滑动,详情可查看官网 1.首先用npm安装 npm install swiper 2.main.js 中引入CSS import 's ...
- WSL调用Windows下的ParaView对OpenFOAM进行后处理
OpenFOAM可以在windows下的Linux子系统(WSL)安装,但是很麻烦的一个问题是WSL没有图形化的界面,只有一个控制台窗口,在后处理的过程中我们就没有办法直接调用paraFoam命令启动 ...
- OpenFOAM——圆筒壁稳态导热
对于圆筒壁的稳态导热,温度分布的解析解为: IN为恒温边界,设置为300K,OUT也为恒温边界,设置为500K 固体导热系数为:0.0887W/(m·K) 首先进行建模操作,任何建模软件均可,本算例采 ...
- 阻塞IO与非阻塞IO、同步IO与异步IO
在学习nodejs时,了解到nodejs的一个重要特征是非阻塞IO,且nodejs中的所有IO都是异步的.既然有非阻塞IO.异步IO,那么必然就有阻塞IO.同步IO了,为了彻底搞清楚这几个概念,在网上 ...
- WebSocket专题(阿里)
我们的项目中使用了websocket 用java-websocket 开源项目做的,阿里的人问我用啥实现的websocket一时没有答上来 回来做了总结: 1.前言 最近有同学问我有没有做过在线咨询功 ...
- SQL回顾
数据库的本质是一种特殊的文件 数据库是由数据表组成的,数据表是真正存储数据的 数据库客户端-->SQL语句-->数据库服务器-->数据库文件 表与表之间存在关联的数据库称为关系型数据 ...