zoukankan      html  css  js  c++  java
  • Codeforces1478D Nezzar and Board

    题目大意:给定n个数字,任意选择x和y得到2x-y,数字被选择后仍然可选择,问给定k是否可以由这些数字进行变化得到。

    题目链接

    解题思路:通过2x-y可以发现可以出现的数字的系数和为1,下面做一个简单的例子

    x y -> 2x-y

    2x-y y->4x-2y-y=4x-3y

    具体证明可用数学归纳法,由于很明显,这里不做证明

    即使得到这个系数和为1的结论,看起来并没有什么用

    这里引入裴蜀定理:设a1,a2,a3......an为n个整数,d是它们的最大公约数,那么存在整数x1......xn使得x1*a1+x2*a2+...xn*an=d。

    那么,我们只要保证系数和为1,求得gcd,得到的gcd一定是可以出现的数字的因子。

    #include<stdio.h>
    #include<algorithm>
    #include<math.h>
    using namespace std;
    typedef long long ll;
    const int maxn=2e5+5;
    ll a[maxn];
    
    ll gcd(ll a,ll b){
        if(b==0) return a;
        else return gcd(b,a%b);
    }
    
    int main()
    {
        int t,n;
        ll m;
        scanf("%d",&t);
        while(t--){
            scanf("%d%lld",&n,&m);
            for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
            ll g=0;
            for(int i=1;i<n;i++){
                g=gcd(g,abs(a[n]-a[i]));
            }
            if((m-a[n])%g==0) printf("YES
    ");
            else printf("NO
    ");
        }
        return 0;
    }
    View Code
  • 相关阅读:
    用Telnet发送HTTP请求
    chrome失去响应问题
    windows应用技巧
    转载:Linux 的系统服务及其配置(略有修改)
    poj2249 排列组合
    poj1068 模拟
    并查集———吉林省赛(六)G题
    著名医生的药方(深搜)
    源代码(C#)
    (课程设计)简单总结
  • 原文地址:https://www.cnblogs.com/noback-go/p/14346193.html
Copyright © 2011-2022 走看看