给定长度为n的序列a和p,求对于p[i](1 <= i <= n), gcd{a[1] + p[i], a[2] + p[i], ... , a[n] + p[i]}的最小值和最大值

题目

思路:

给定长度为n的序列a和p,求对于p[i](1 <= i <= n), gcd{a[1] + p[i], a[2] + p[i], ... , a[n] + p[i]}的最小值和最大值_第1张图片

#include
using namespace std;
#define int long long
const int maxn = 2005;
int a[maxn], b[maxn], c[maxn];
signed main(){
    int n;
    cin >> n;
    int gcd = 0;
    for(int i = 1; i <= n; i++){
        cin >> a[i];
    }
    for(int i = 1; i <= n; i++) cin >> b[i];
    for(int i = 1; i <= n; i++) cin >> c[i];
    int minn = 1e18, maxx = 0;
    sort(a + 1, a + n + 1);
    for(int i = 2; i <= n; i++){
        gcd = __gcd(gcd, a[i] - a[i - 1]);
    }
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= n; j++){
            int x = b[i] + c[j];
            int t = __gcd(gcd, a[1] + x);
            minn = min(minn, t);
            maxx = max(maxx, t);
        }
    }
    cout << minn << ' ' << maxx;
    return 0;
}

你可能感兴趣的:(牛客,算法,c++)