[BZOJ1385][Baltic2000]Division expression

题目链接:

BZOJ1385

比较简单的思维题。

首先,无论怎么加括号,\(x_1\)在分子上,\(x_2\)一定在分母的位置,这很显然。

对于其他数,一定可以通过加括号转移到分子上。

(具体就是先处理\(x_2\sim x_n\),再用\(x_1\)去除使分数倒转。)

\(x_1/(x_2/\cdots/x_n)=x_1/\frac{x_2}{\prod_{x=3}^nx_i}=\frac{\prod_{x\not=2}\limits x_i}{x_2}\)

那么只需判断\(\prod_{x\not=2}\limits x_i\)是否整除\(x_2\)即可。

一开始往分解质因数的方向去想了。。其实只要对每个\(x_i(i\not=2)\)\(x_2\)\(GCD\)约去即可,最后判断是否剩\(1\)

时间复杂度 \(O(Dnlog_2x)\)

#include <cstdio>

int Gcd(int a,int b){return b?Gcd(b,a%b):a;}

int t,n,x[10005];

int main()
{
	for(scanf("%d",&t);t--;)
	{
		scanf("%d",&n);
		for(int i=1;i<=n;++i)scanf("%d",&x[i]);
		for(int i=1;i<=n;++i)
			if(i!=2)x[2]/=Gcd(x[2],x[i]);
		puts(x[2]==1?"YES":"NO");
	}
	return 0;
}
posted @ 2019-01-02 11:38  LanrTabe  阅读(137)  评论(0编辑  收藏  举报