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
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 ",x) 9 #define pd(x) printf("%f ",x) 10 #define pl(x) printf("%lld ",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 ",x) 9 #define pd(x) printf("%f ",x) 10 #define pl(x) printf("%lld ",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 }