1. 程式人生 > >BZOJ 1441: Min(裴蜀定理)

BZOJ 1441: Min(裴蜀定理)

分析 eps 一個 define div () print int pan

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 }





BZOJ 1441: Min(裴蜀定理)