题目链接: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;
}