zoukankan      html  css  js  c++  java
  • [BZOJ1385][Baltic2000]Division expression

    题目链接:

    BZOJ1385

    比较简单的思维题。

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

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

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

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

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

    一开始往分解质因数的方向去想了。。其实只要对每个(x_i(i ot=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;
    }
    
  • 相关阅读:
    高级打字机
    不等数列
    间谍网络
    医院设置
    题目编号生成器
    传纸条
    聪明的打字员
    倒水问题
    八数码难题
    生日蛋糕
  • 原文地址:https://www.cnblogs.com/LanrTabe/p/10207630.html
Copyright © 2011-2022 走看看