zoukankan      html  css  js  c++  java
  • 「AtCoder Grand018A」Getting Difference(GCD)

    题目链接A - Getting Difference

    题意

    有n(1~(10^5))个数(A_i) (1~(10^9)),每次选两个数,将它们的差的绝对值加入这堆数。问k(1~(10^9))是否可能出现在这堆数中。

    题解

    因为选择的数的差一定是这两个数的gcd的倍数,因此可以令g为所有数的gcd,那么g的不超过数组中最大值的倍数都是可以得到的。

    代码

    #include <cstdio>
    #define N 100005
    int gcd(int a,int b){
    	return b?gcd(b,a%b):a;
    }
    int n,k;
    bool ans;
    int a[N];
    int main(){
    	scanf("%d%d",&n,&k);
    	for(int i=1;i<=n;++i)
    		scanf("%d",&a[i]),ans|=a[i]>=k;
    	int g=a[1];
    	for(int i=2;i<=n;++i)
    		g=gcd(a[i],g);
    	ans&=(k%g==0);
    	puts(ans?"POSSIBLE":"IMPOSSIBLE");
    	return 0;
    }
    

    ps.我才不会说我gcd写错给wa了两次。

  • 相关阅读:
    1276
    1235
    1170
    Grids
    1137
    1127
    1076
    🍖Mysql三种模式的指定方式介绍
    🍖存储引擎介绍
    🍖MySQL库的详细操作
  • 原文地址:https://www.cnblogs.com/flipped/p/7226578.html
Copyright © 2011-2022 走看看