G

题目链接:https://vjudge.net/contest/162220#problem/G

题解:

1.构造gcd函数(辗转相除法)

2.先求出a数组的gcd不是1直接YES(肯定比1大啊~)

3.根据题目的特殊构造只有数组元素————奇数和偶数,

所以分类讨论,根据奇奇和奇偶|| 偶奇 来++(就是要把数组元素设定为2来计算gcd,具体++要根据分类来)

AC code:

#include<iostream>
#include<cstdio>
using namespace std;

int gcd(int a,int b)
{
    int t;
    t=a%b;
    while(t)
    {
     a=b;
     b=t;
     t=a%b;
 }
 return b;
}

int main()
{
    int n,tmp=0;
    int a[100010]={0};
    cin>>n;
    for(int i=1;i<=n;i++)
 {
        cin>>a[i];
        tmp=gcd(tmp,a[i]);
    }
    if(tmp!=1)
        cout<<"YES"<<" "<<"0"<<endl;
    else{
        int ans=0;
        for(int i=1;i<n;i++)
  {
            if(a[i]&1&&a[i+1]&1)
   {
                ans++;
                a[i]=a[i+1]=2;
            }
        }
        for(int i=1;i<n;i++)
  {
            if(a[i]&1||a[i+1]&1)
   {
                ans+=2;
                a[i]=a[i+1]=2;
            }
        }
        cout<<"YES"<<endl;
        cout<<ans<<endl;
    }
    return 0;
}

原文地址:https://www.cnblogs.com/DemonZiv/p/6818894.html