[BZOJ1385] [Baltic2000] Division expression
程序员文章站
2023-10-15 23:17:06
题面 除法表达式有如下的形式: 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。
样例
2 4 1 2 1 2 3 1 2 3
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<<"yes\n";else cout<<"no\n"; 11 } 12 return 0; 13 }
上一篇: 为什么说seo需要坚持
下一篇: Python 注释小结