题意
给定x1/x2/x3/x4..../xn,可以加入括号改变运算顺序,询问是否可以使改变后的值为整数。
可知x1必为分母,x2必为分子,x3,x4...xn可以为分子也可以为分母。
可以贪心证明
若x1∗x3∗x4∗...∗x4x2不为整数,那么就没有其他方案使改变后的值为整数。
所以我们只要判断这个值是不是整数就行了,即
判断x2/gcd(x2,x1)/gcd(x2,x3)/.../gcd(x2,xn)是否为1
#include <cstdio>
int gcd(int x,int y){return y?gcd(y,x%y):x;}
int n,x,y,t;
int main(){
for(scanf("%d",&t);t;t--){
scanf("%d%d%d",&n,&y,&x);
x/=gcd(x,y);
for(int i=1;i<=n-2;i++){
scanf("%d",&y);
x/=gcd(x,y);
}
if(x==1) puts("YES");else puts("NO");
}
return 0;
}
本文介绍了一种通过改变运算顺序使分数表达式的值成为整数的方法。文章提出了一种贪心策略,用于验证给定的分数序列是否可以通过合理地添加括号使其结果为整数。同时提供了一个C++实现示例。
390

被折叠的 条评论
为什么被折叠?



