bzoj 1441: Min 裴蜀定理

题目:

给出\(n\)个数\((A_1, ... ,A_n)\)现求一组整数序列\((X_1, ... X_n)\)使得\(S=A_1*X_1+ ...+ A_n*X_n > 0\),且\(S\)的值最小

题解:

貌似这是什么裴蜀定理...
总之多试几个样例就会发现答案是所有数的gcd

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
inline void read(int &x){
    x=0;char ch;bool flag = false;
    while(ch=getchar(),ch<'!');if(ch == '-') ch=getchar(),flag = true;
    while(x=10*x+ch-'0',ch=getchar(),ch>'!');if(flag) x=-x;
}
inline int gcd(const int &a,const int &b){
    return b == 0 ? a : gcd(b,a%b);
}
int main(){
    int n,ans;read(n);
    for(int i=1,x;i<=n;++i){
        read(x);x = abs(x);
        if(i == 1) ans = x;
        else ans = gcd(ans,x); 
    }printf("%d\n",ans);
    getchar();getchar();
    return 0;
}
posted @ 2017-03-20 06:10  Sky_miner  阅读(233)  评论(0编辑  收藏  举报