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();
	while(!isdigit(c)) c=getchar();
	while(isdigit(c)) x=x*10+c-‘0‘,c=getchar();
	return x;
}
int gcd(int a,int b){
	return b?gcd(b,a%b):a;
}
int a[10005];
int main(){
	int cas=read();
	rep(i,1,cas){
		int n=read();a[1]=read();int temp=read();
		rep(i,2,n-1) a[i]=read();
		rep(i,1,n-1) {
			temp/=gcd(temp,a[i]);
			if(temp==1) {
				printf("YES\n");break;
			}
		}
		if(temp!=1) printf("NO\n");
	}
	return 0;
}

  

1385: [Baltic2000]Division expression

Time Limit: 5 Sec  Memory Limit: 64 MB
Submit: 211  Solved: 142
[Submit][Status][Discuss]

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

HINT

Source

[Submit][Status][Discuss]

时间: 2024-10-11 18:36:42

bzoj1385: [Baltic2000]Division expression的相关文章

[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

题目 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.现给出一个除

【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

【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

[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

大神刷题表

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

interpreter(解释器模式)

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

《JAVA与模式》之解释器模式 (转载)

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

Diagram Designer 的表达式求值工具(Expression Evaluator)

软件版本:Diagram Designer (Version 1.24) 一.Diagram Designer 的表达式求值工具 下图为 Diagram Designer 的表达式求值工具: 在程序的帮助手册中,对这个表达式求值工具的使用有着较为详细的描述.(在[Using Diagram Designer]的[Expression Evaluator]章节,不过内容是英文的) 里面提到了这个表达式求值工具有下面几个特征(Notable Features): trigonometric func