+798 C. Codeforces Майк и НОД проблема в теории чисел, последовательность НОД> количество изменений 1

Тема ссылка: https: //codeforces.com/contest/798/problem/C
подвержены действию: дать вам число п, а1, а2, ... в. В связи с этим НОД (a1, a2, ... с )> 1, так что операция может быть выполнена один раз д.в., AI + 1 становится д.в. - в [I + 1] , AI + A [I + 1]. Определена такие , что НОД (а1, а2, ... )> требуется операция минимальное количество.

Идеи: Во-первых, мы должны знать, если мы можем достичь НОД (а1, а2, ... ап)> 1, то, конечно, a1 ~ четное число (0 четное число), поэтому наша цель состоит в том, чтобы использовать наименьшее количество операций становится число всех даже. Если два числа нечетно, то операция, которая требует времени (плюс или минус нечетное четное число), если оно является четным и нечетным, и это требует двух операций (сложение и вычитание, чтобы получить нечетно нечетных и четных, то нечетных и четных-нечетных получается вычитанием) , так что не может быть больше, чем 1 НОД

#include <bits/stdc++.h>
#define LL long long
using namespace std;
 
int a[100005];
int main()
{
    int n, gcd;
    scanf("%d", &n);
    for(int i=1; i<=n; i++){
        scanf("%d", &a[i]);
        if(i==1){
            gcd=a[i];
        }
        else{
            gcd=__gcd(gcd, a[i]);
        }
    }
    printf("YES\n");
    if(gcd>1){
        printf("0\n");
        return 0;
    }
    int ans=0;
    a[n+1]=2;
    for(int i=1; i<=n; i++){
 
        if(a[i]%2==1&&a[i+1]%2==1){
            ans++;
            i++;
        }
        else if(a[i]%2==1&&a[i+1]%2==0){
            ans+=2;
        }
    }
    printf("%d\n", ans);
 
    return 0;
}
Опубликовано 374 оригинальные статьи · вона похвала 22 · просмотров 20000 +

рекомендация

отblog.csdn.net/qq_21433411/article/details/103215865