标签:++ span pen map 负数 正整数 ott 复制 onclick
给出n个数(A1...An)现求一组整数序列(X1...Xn)使得S=A1X1+...AnXn>0,且S的值最小
输入格式:
第一行给出数字N,代表有N个数 下面一行给出N个数
输出格式:
S的最小值
对于100%的数据,1 \le n \le 201≤n≤20,|x_i| \le 100000∣xi?∣≤100000
裴蜀(贝祖)定理
ax + by = c 有整数解 x y 的条件是 c 是 gcd(a,b) | c , 所以 c 为最小正整数的话就是要求 c 是a b 的最大公约数。
这个定理对于多个变量来说同样使用。可以看成两个变量的不断累加。
但是要注意输入的数可能是负数,此时直接取反就可以了,对gcd没有影响。
代码
#include<cstdio> #include<cstdlib> #include<cstring> #include<string.h> #include<cmath> #include<algorithm> #include<queue> #include<stack> #include<deque> #include<map> #include<iostream> using namespace std; typedef long long LL; const double pi=acos(-1.0); const double e=exp(1); const int N = 998244353; int gcd(int a, int b) { int mid; while(b) { mid = a; a = b; b = mid % b; } return a; } int main() { int i,p,j,n,t; scanf("%d",&n); scanf("%d",&p); if(p < 0) p = -p; for(i = 1; i < n; i++) { scanf("%d",&j); if(j < 0) j = -j; p = gcd(p,j); } printf("%d\n",p); return 0; }
标签:++ span pen map 负数 正整数 ott 复制 onclick
原文地址:https://www.cnblogs.com/daybreaking/p/10726492.html