zoukankan      html  css  js  c++  java
  • Codeforces Round #698 (Div. 2)

    Codeforces Round #698 (Div. 2)

    D. Nezzar and Board

    https://codeforces.com/contest/1478/problem/D

    题解:每次可以选择两个数x,y,增加一个2x-y到数堆中,我们可以发现一个规律,就是每次不管怎么组合,被增加的数的系数和始终为1。

    那不是其实就是说可以组合出任意种系数和为0的数,并加一个数。

    考虑n个数中任意组合出系数和为0的数,我们将所有a[i]-a[i-1]算出来,并将n-1个差任意组合即可满足系数和为0,n-1个差能组合出来什么数,不正是裴蜀定理的板子题吗,最后在加任意一个a,就行了。

    #include<iostream>
    #include<algorithm>
    using namespace std;
    #define ll long long
    ll t,n,k,a[200007];
    ll gcd(ll a,ll b){
    	if(b==0){
    		return a;
    	}
    	else{
    		gcd(b,a%b);
    	}
    }
    int main(){
    	cin>>t;
    	while(t--){
    		cin>>n>>k;
    		for(int i=1;i<=n;i++){
    			cin>>a[i];
    		}
    		sort(a+1,a+1+n);
    		ll gc=0;
    		for(int i=2;i<=n;i++){
    			ll lin=a[i]-a[i-1];
    			gc=gcd(lin,gc);
    		}
    		int ok=0;
    		for(int i=1;i<=n;i++){
    			if((k-a[i])%gc==0){
    				ok=1;
    			}
    		}
    		if(ok==1){
    			printf("YES
    ");
    		}
    		else{
    			printf("NO
    ");
    		}
    	}
    }
    
  • 相关阅读:
    Atom 和 markdown 基本使用
    c++11 正则表达式基本使用
    Emacs 之窗口管理
    Emacs 之列编辑模式
    Emacs 之查看帮助
    使用 json_in_java
    Linux服务 httpd
    Linux 编译安装BIND
    Kerberos
    Linux服务 DNS&BIND
  • 原文地址:https://www.cnblogs.com/whitelily/p/14345887.html
Copyright © 2011-2022 走看看