[BZOJ1385]Baltic2000 Division expression

Source

观察这个式子E =  X1 / X2 / X3 .... / Xn

我们设E' = Xa..../Xb....

即把加括号后的式子改成分数线的形式,有一些元素属于分子,其他的元素属于分母。

我们发现:

X1 不得不在分子

X2 不得不在分母

X3 ~ Xn 可在分子也可在分母 

如果叫你把X3 ~ Xn分一部分在分子,其他的在分母,你会怎么做??

当然是把全部元素放在分子呗。。。

因此最优的 E' = X1 * X3 * X4....* Xn / X2

如果真的乘起来的话肯定会溢出,所以当然要用GCD。

清爽的30行代码(~ ̄▽ ̄)~ 

#include<cstdio>
using namespace std;
#define MAXN 10005

int T;
int n, t, s;

int gcd( int x, int y ){
    return x % y == 0 ? y : gcd( y, x % y );
}

int main(){
    scanf( "%d", &T );
    while( T-- ){
        scanf( "%d", &n );
        scanf( "%d", &t );
        if ( n == 1 ){//注意特判
            printf( "YES\n" ); continue;
        }
        scanf( "%d", &s );
        s /= gcd( s, t );
        for ( int i = 3; i <= n; ++i ){
            scanf( "%d", &t );
            s /= gcd( s, t );
        }
        if ( s == 1 ) printf( "YES\n" );
        else printf( "NO\n" );
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/louhancheng/p/9506289.html