(luogu题解搬运系列)luogu p2651 添加括号Ⅲ

题目描述

现在给出一个表达式,形如a1/a2/a3/.../an

如果直接计算,就是一个个除过去,比如1/2/1/4=1/8。

然而小A看到一个分数感觉很不舒服,希望通过添加一些括号使其变成一个整数。一种可行的办法是(1/2)/(1/4)=2。

现在给出这个表达式,求问是否可以通过添加一些括号改变运算顺序使其成为一个整数。

输入输出格式

输入格式:

 

一个测试点中会有多个表达式。

第一行t,表示表达式数量。

对于每个表达式,第一行是n,第二行n个数,第i个数表示ai。

 


输出格式:

 

输出t行。

对于每个表达式,如果可以通过添加括号改变顺序使其变成整数,那么输出“Yes”,否则输出“No”

 

输入输出样例

输入样例#1:

2
4
1 2 1 4
5
6 5 7 9 12

输出样例#1:

Yes
No

说明

对于40%的数据,n<=16

对于70%的数据,n<=100

对于全部数据,2<=n<=10000,1<=t<=100,1<=ai<=maxlongint

首先写成a1/a2/a3/.../an的形式

(题目中的数据已经保证了ai是正整数)

分析:通过加括号的方式使得最终分数的分子所含的所有因子包含分母上的所有因子,也就是通过约分也是是最终的分母变为1

a2一定在最终的分母上,为什么这么说呢?

对于a1/a2/a3/.../an,考虑加括号的方式:

我们可以很容易地知道,a1一定要作为分母出现,因为没有任何一个数在a1之前。所以我们就可以看作是a1去除一个数,这个数是由a2/a3/.../an通过加括号的方式算出的

现在我们要做的,就是使(a2/a3/.../an)中所含的因子数尽量少,此时已经与a1无关了。

可以证明,(a2/a3/.../an)的时候,因子是最少的:

对于(a2/a3/.../an)来说,a2作为分子,不管后面的数字如何添加括号,对于a2,只有乘这个数或是除以这个数(假设中间结果不约分)。a2每乘一个数b,因子加上(b包含的所有因子),a2除以所有b,因子减去(b包含的所有因子),a2中不含的因子最终将加到a1上。

可以看出,(a2/a3/.../an)中间不加括号,进行连除时,a2可以在不增加新的因子情况下,因子最少,所以我们要加的括号就是这样

a1/(a2/a3/.../an)

然后如何判断能否使最终结果变为整数呢?只需要判断(a3,a4...an)这些数中是否含有a2的全部因子,具体做法:从a1扫到an,每个数(当然除了a2)分别与a2约去他们的最大公因数,an约分结束,a2能变为1,那就是能使最终结果变为整数,反之不能。

时间: 2024-10-12 06:56:31

(luogu题解搬运系列)luogu p2651 添加括号Ⅲ的相关文章

(luogu题解搬运系列)luogu p1459 三值的排序

题目描述 排序是一种很频繁的计算任务.现在考虑最多只有三值的排序问题.一个实际的例子是,当我们给某项竞赛的优胜者按金银铜牌排序的时候.在这个任务中可能的值只有三种1,2和3.我们用交换的方法把他排成升序的. 写一个程序计算出,给定的一个1,2,3组成的数字序列,排成升序所需的最少交换次数 输入输出格式 输入格式:   第一行: 奖牌个数N (1 <= N <= 1000) 第 2行到第N+1行: 每行一个数字,表示奖牌.共N行.(1..3)   输出格式:   共一行,一个数字.表示排成升序所

Luogu P2308 添加括号 (DP)

题目 题目背景 给定一个正整数序列a(1),a(2),...,a(n),(1<=n<=20) 不改变序列中每个元素在序列中的位置,把它们相加,并用括号记每次加法所得的和,称为中间和. 例如: 给出序列是4, 1, 2, 3. 第一种添括号方法: ((4+1)+(2+3))=((5)+(5))=(10) 有三个中间和是5,5,10,它们之和为:5+5+10=20 第二种添括号方法 (4+((1+2)+3))=(4+((3)+3))=(4+(6))=(10) 中间和是3,6,10,它们之和为19.

【LuoGu题解】 P1362 【兔子数】

依题意模拟暴力打表找规律,注意到:符合题意的数中只包含\(0,1,2,3\),大于\(3\)的数,平方后都会进位,进位导致\(S(x)*S(x)<S(x*x)\) 观察数据范围,最大满足题意的数字有\(10\)位,那么我们枚举每一位上的数字,然后暴力判断是否为兔子数就行了. Code: #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #inclu

浏览器扩展系列————给MSTHML添加内置脚本对象【包括自定义事件】

原文:浏览器扩展系列----给MSTHML添加内置脚本对象[包括自定义事件] 使用场合: 在程序中使用WebBrowser或相关的控件如:axWebBrowser等.打开本地的html文件时,可以在html的脚本中使用自己在.net中定义的类,实现与Internet Explorer server的互操作.此外也可以在充分利用html在设计界面方面高效,简单的同时,也可以实现一些复杂的特性. 实现: Code Code highlighting produced by Actipro CodeH

MDT2012部署系列之14 添加应用部署

(十六).添加应用部署 1.右击"Application"选择"New Application" 2.选择"Application with source files"点击"Next" 3.设置程序名称等,自己方便记忆就OK 4.设置软件源路径,点击"Next" 5.名称确认,点击"Next" 6.设置对应的安装命令,以及程序所有目录,点击"Next" 7.确认信息,

luogu题解P2486[SDOI2011]染色--树链剖分+trick

题目链接 https://www.luogu.org/problemnew/show/P2486 分析 看上去又是一道强行把序列上问题搬运到树上的裸题,然而分析之后发现并不然... 首先我们考虑如何在序列上维护信息:从最简单的想起,如果两个相邻的元素合并,显然是这两个元素所含颜色段个数(其实就是1)加起来,如果两个元素颜色相同就减1;那么两个分别含有两个元素的相邻区间合并,还是把这两个区间所含颜色段个数加起来,如果左区间最右边的颜色等于右区间最左边的颜色就减去1. 如此我们已经得到线段树维护信息

luogu题解 P2184 【贪婪大陆】

题目链接: https://www.luogu.org/problemnew/show/P2184 思路: 首先我想吐槽一下为什么现有题解中的做法都是一样的,而且还比较难以理解; 我就讲下我的做法,本质上是一样的,但是跟容易理解. 根据题意每加一次地雷就多一个种类对吧,我们用一个cnt记录加过地雷的次数,同时分别用两个数组记录左右两个端点的位置.然后查询[l,r]时呢,我们分别查询[1,l-1]有多少个右端点,[r+1,n]有多少个左端点,然后这两个数的和是什么意思呢?就是有多少次铺地雷没铺到我

luogu题解P1032字串变换--BFS+STL:string骚操作

题目链接 https://www.luogu.org/problemnew/show/P1032 分析 这题本来很裸的一个BFS,发现其中的字符串操作好烦啊.然后就翻大佬题解发现用STL中的string居然变得这么简洁!!! 各种string操作请看另一位大佬博客,写得很全啊: https://www.cnblogs.com/rvalue/p/7327293.html#commentform 其实我们这题只用到两个相关函数:\(S.find(string,pos)\)和\(S.substr()\

luogu题解 P3763 【[TJOI2017]DNA】

题目链接: https://www.luogu.org/problemnew/show/P3763 思路: 首先我们要用到Rabin-Karp哈希,其实就是这个: 若\(w_{str}\)=(\(a_0\) \(p^{n-1}\)+\(a_1\) \(p^{n-2}\)+...+\(a_{n-1}\) \(p^0\)) 所以 \(w_{pre_{i-1}}\) \(=(\) \(a_0\) \(p^{i-1}\)+\(a_1\) \(p^{i-2}\)+...+\(a_{i-1}\) \(p^0