• 牛客 Magic Forest


    题意:

    有n棵树,其魔力值为ai,对于任意(i, j) (i可以等于j),将出现魔力值为$a_i - a_j$ 和 $a_i$ + $a_j$ 的树在森林中,想知道是否有魔力值为x的树在森林中。

    思路:

    n个整数的裴蜀定理

    有$a_1x_1+a_2x_2+...+a_nx_n = gcd(a_1, a_2, ..., a_n) = d$

    若$x % d == 0$,则有解(求n元一次方程),否则无解

    Code:

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    typedef long long ll;
    
    const int N = 1e3 + 20;
    
    int n, m;
    ll a[N], ans[N];
    
    ll exgcd(ll a, ll b, ll &x, ll &y){
        if(!b){
            x = 1, y = 0;
            return a;
        }
        ll d = exgcd(b, a % b, y, x);
        y -= a / b * x;
        return d;
    }
    
    
    int main(){
        cin >> n >> m;
        
        for(int i = 0; i < n; i ++){
            cin >> a[i];
        }
        
        ll g = a[0];
        ans[0] = 1;
        
        ll k;
        for(int i = 1; i < n; i ++){
            g = exgcd(g, a[i], k, ans[i]);
            for(int j = 0; j < i; j ++){
                ans[j] *= k;
            }
        }
        
        int x;
        while(m --){
            cin >> x;
            
            if(x % g == 0){
                k = x / g;
                for(int i = 0; i < n; i ++){
                    cout << ans[i] * k << " ";
                }
                cout << endl;
            }
            else{
                puts("NO");
            }
        }
        
        return 0;
    }
  • 相关阅读:
    JDK1.5新特性
    mysql的基本使用
    IO简单示例
    序列化
    策略模式
    div+css布局之流体浮动布局
    xp优化
    Junit所使用的设计模式
    SSH使用总结(annotation配置方式)
    hibernate3.6.0使用总结
  • 原文地址:https://www.cnblogs.com/jungu/p/13387974.html
Copyright © 2020-2023  润新知