c/c++语言开发共享[BZOJ1385] [Baltic2000] Division expression

题面 除法表达式有如下的形式: X1/X2/X3…/Xk 其中Xi是正整数且Xi<=1000000000(1<=i<=k,K<=10000) 除法表达式应当按照从左到右的顺序求,例如表达式1/2/1/2的值为1/4.但可以在表达式中国入括号来改变计算顺序,例如(1/2)/(1/2)的值为1.现给 …


题面

除法表达式有如下的形式: x1/x2/x3…/xk 其中xi是正整数且xi<=1000000000(1<=i<=k,k<=10000) 除法表达式应当按照从左到右的顺序求,例如表达式1/2/1/2的值为1/4.但可以在表达式中国入括号来改变计算顺序,例如(1/2)/(1/2)的值为1.现给出一个除法表达式e,求是告诉是否可以通过增加括号来使其为e’,e’为整数。

输入格式

先给出一个数字d,代表有d组数据. 每组数据先给出一个数字n,代表这组数据将有n个数。 接下来有n个数,分别代表x1,x2,x3,…,xn。

输出格式

如果能使得表达式的值为一个整数,则输出yes.否则为no。

样例

[BZOJ1385] [Baltic2000] Division expression

2  4  1  2  1  2  3  1  2  3

输入

[BZOJ1385] [Baltic2000] Division expression

yes  no

输出

思路

打个比方,x1/x2/x3=x1/(x2/x3)=x1*x3/x2

易证得x2定为分母,只要其他数都能被s2整除即可(gcd).

代码

 1 #include<bits/stdc++.h>   2 using namespace std;   3 long long n,t,s[100000],sum;   4 int main(){   5     cin>>n;   6     while (n--){   7         cin>>t;   8         for (int i=1;i<=t;i++) cin>>s[i];   9         for (int i=1;i<=t;i++) if (i!=2)s[2]/=__gcd(s[i],s[2]);  10         if (s[2]==1) cout<<"yesn";else cout<<"non";  11     }  12     return 0;  13 }

 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/608333.html

(0)
上一篇 2021年5月15日
下一篇 2021年5月15日

精彩推荐