BZOJ 1385: [Baltic2000]Division expression

题目

1385: [Baltic2000]Division expression

Time Limit: 5 Sec  Memory Limit: 64 MB

Description

除法表达式有如下的形式: 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‘为整数

Input

先给出一个数字D,代表有D组数据. 每组数据先给出一个数字N,代表这组数据将有N个数。 接下来有N个数

Output

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

Sample Input

2
4
1
2
1
2
3
1
2
3

Sample Output

YES
NO

题解

这道题目我们可以知道x2无论如何都是分母,而其他数字都可以通过括号转化为分子,所以我们一直除就好了,知道x2为1就好辣!

代码

 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 int gcd(int a,int b){return b==0?a:gcd(b,a%b);}
 5 int T,t,n,a[100001];
 6 int main(){
 7     scanf("%d",&T);
 8     while(T--){
 9         scanf("%d%d%d",&n,&a[1],&t);
10         for(int i=1;i<=n-2;i++)
11         scanf("%d",&a[i+1]);
12         for(int i=1;i<n;i++){
13             t/=gcd(t,a[i]);
14             if(t==1){printf("YES\n");break;}
15         }
16         if(t!=1)printf("NO\n");
17     }
18     return 0;
19 }

时间: 2024-12-23 19:47:37

BZOJ 1385: [Baltic2000]Division expression的相关文章

【BZOJ]】1385 [Baltic2000]Division expression

[算法]欧几里德算法 [题解]紫书原题 #include<cstdio> #include<algorithm> using namespace std; const int maxn=10010; int T,t,n,a[maxn]; int gcd(int a,int b) {return b==0?a:gcd(b,a%b);} int main() { scanf("%d",&T); for(int i=1;i<=T;i++) { scanf

bzoj1385: [Baltic2000]Division expression

欧几里得算法.可以发现规律,a[2]作为分母,其他作为分子,必定是最好的选择.判断是否为整数即可. #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; #define rep(i,s,t) for(int i=s;i<=t;i++) int read(){ int x=0;char c=getchar(); whil

[BZOJ1385] [Baltic2000] Division expression (数学)

Description 除法表达式有如下的形式: 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'为整数 Input 先给出一个数字D,代表有D组数据. 每组数据先给出一个数字N,代表这组数据将有N个

【BZOJ】【1385】【Baltic2000】Division expression

欧几里得算法 普通的求个gcd即可……思路题 因为要求尽量是整数……所以 x1/(x2/x3/x4..../xn)是最大的结果了,因为x2必须为分母,x1必须为分子……x3~xn可分子可分母,所以都丢到分子上,结果ans为整数的可能性最大=.=因为如果放下去相当于 ans/(xi^2) 嗯……应该很好理解- - 1 /************************************************************** 2 Problem: 1385 3 User: Tun

BZOJ 4421 Digit Division

随便dp一下就好了... #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define maxn 300050 #define maxm 1000050 #define mod 1000000007 using namespace std; long long n,m,t[maxn],sum[maxm],dp[maxn]; char s[maxn]; int

[bzoj1385]Division expression

容易发现a2一定是分母,且容易做到其余都是分子,因此相当于判定a2能否整除a1*a3*……*an,不断让a2除以其与其他数的gcd即可(注意特判n=1) 1 #include<bits/stdc++.h> 2 using namespace std; 3 int t,n,s,x; 4 int gcd(int x,int y){ 5 if (!y)return x; 6 return gcd(y,x%y); 7 } 8 int main(){ 9 scanf("%d",&am

lightoj1385 - Kingdom Division

1385 - Kingdom Division    PDF (English) Statistics Forum Time Limit: 1 second(s) Memory Limit: 32 MB The king of Geometry-Land was in deep trouble. His three sons quarrel all the time. The king tried a lot but in vain. "How about dividing the kingdo

interpreter(解释器模式)

一.引子 其实没有什么好的例子引入解释器模式,因为它描述了如何构成一个简单的语言解释器,主要应用在使用面向对象语言开发编译器中:在实际应用中,我们可能很少碰到去构造一个语言的文法的情况. 虽然你几乎用不到这个模式,但是看一看还是能受到一定的启发的. 二.定义与结构 解释器模式的定义如下:定义语言的文法,并且建立一个解释器来解释该语言中的句子.它属于类的行为模式.这里的语言意思是使用规定格式和语法的代码. 在GOF的书中指出:如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例

大神刷题表

9月27日 后缀数组:[wikioi3160]最长公共子串 dp:NOIP2001统计单词个数 后缀自动机:[spoj1812]Longest Common Substring II [wikioi3160]最长公共子串 [spoj7258]Lexicographical Substring Search 扫描线+set:[poj2932]Coneology 扫描线+set+树上删边游戏:[FJOI2013]圆形游戏 结论:[bzoj3706][FJ2014集训]反色刷 最小环:[poj1734