BZOJ 1441: Min(裴蜀定理)

BZOJ 1441:Min

Description

给出n个数(A1...An)现求一组整数序列(X1...Xn)使得S=A1*X1+...An*Xn>0,且S的值最小

Input

第一行给出数字N,代表有N个数 下面一行给出N个数

Output

S的最小值

Sample Input

2
4059 -1782

Sample Output

99

HINT

 

Source

分析:相当于拓展欧几里得的n次推广。

代码:

 1 #include"bits/stdc++.h"
 2 #define db double
 3 #define ll long long
 4 #define vec vector<ll>
 5 #define ci(x) scanf("%d",&x)
 6 #define cd(x) scanf("%lf",&x)
 7 #define cl(x) scanf("%lld",&x)
 8 #define pi(x) printf("%d\n",x)
 9 #define pd(x) printf("%f\n",x)
10 #define pl(x) printf("%lld\n",x)
11 #define rep(i, n) for(int i=0;i<n;i++)
12 using namespace std;
13 const int N = 1e6 + 5;
14 const int mod = 1e9 + 7;
15 const int MOD = 998244353;
16 const db  PI  = acos(-1.0);
17 const db  eps = 1e-10;
18 int n,m;
19 int a[N];
20 int main()
21 {
22     ci(n);
23     int ans=0;
24     for(int i=0;i<n;i++) ci(a[i]),ans=__gcd(ans,a[i]);
25     pi(ans);
26 }

 

Wannafly挑战赛22.A

有一个计数器,计数器的初始值为0,每次操作你可以把计数器的值加上a1,a2,...,an中的任意一个整数,操作次数不限(可以为0次),问计数器的值对m取模后有几种可能。

输入描述:

第一行两个整数n,m
接下来一行n个整数表示a1-an.
1≤m,a1,a2,...,an≤1000000000

 

 

分析:m/gcd(m,a1,a2,..,an);

代码:

 1 #include"bits/stdc++.h"
 2 #define db double
 3 #define ll long long
 4 #define vec vector<ll>
 5 #define ci(x) scanf("%d",&x)
 6 #define cd(x) scanf("%lf",&x)
 7 #define cl(x) scanf("%lld",&x)
 8 #define pi(x) printf("%d\n",x)
 9 #define pd(x) printf("%f\n",x)
10 #define pl(x) printf("%lld\n",x)
11 #define rep(i, n) for(int i=0;i<n;i++)
12 using namespace std;
13 const int N = 1e6 + 5;
14 const int mod = 1e9 + 7;
15 const int MOD = 998244353;
16 const db  PI  = acos(-1.0);
17 const db  eps = 1e-10;
18 int n,m;
19 int a[N];
20 int main()
21 {
22     ci(n),ci(m);
23     int ans=m;
24     for(int i=0;i<n;i++) ci(a[i]),ans=__gcd(ans,a[i]);
25     pi(m/ans);
26 }

 

 





posted @ 2018-08-18 20:40  thges  阅读(273)  评论(0编辑  收藏  举报