Codeforces 798C Mike and gcd problem gcd+贪心
2017-04-22 19:34
387 查看
点击打开链接
题意:n个数,n<=1e5,操作:把ai,ai+1 替换成 a[i]-a[i+1],a[i]+a[i+1],问gcd(a1,a2..an)>1的最少操作次数
若初始d=gcd(a1..an)==1,肯定使用操作,则使用操作后->d|2a[i] d|2a[i+1],可以看出最后的d一定整除偶数,所以n个数必须都为偶数.
问题转化为把n个数变为偶数的最小操作次数 a[i]-a[i+1],a[i]+a[i+1],相邻两个odd需要一次操作,相邻odd,even 需要两次操作
贪心:先处理(odd,odd) 在处理(o,e),(e,o)即可
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+20;
ll a
,n;
ll gcd(ll a,ll b)
{
return b==0?a:gcd(b,a%b);
}
int main()
{
while(cin>>n)
{
for(int i=1;i<=n;i++)
scanf("%I64d",&a[i]);
ll d=gcd(a[1],a[2]);
for(int i=3;i<=n;i++)
d=gcd(d,a[i]);
if(d>1)
{
puts("YES");
puts("0");
continue;
}
int ans=0;
for(int i=1;i<n;i++)
{
if(a[i]%2&&a[i+1]%2)
a[i]=0,a[i+1]=0,ans++;//变为任意偶数即可
}
for(int i=1;i<n;i++)
{
if(a[i]%2&&a[i+1]%2==0||(a[i]%2==0&&a[i+1]%2))
a[i]=0,a[i+1]=0,ans+=2;
}
puts("YES");
cout<<ans<<endl;
}
return 0;
}
题意:n个数,n<=1e5,操作:把ai,ai+1 替换成 a[i]-a[i+1],a[i]+a[i+1],问gcd(a1,a2..an)>1的最少操作次数
若初始d=gcd(a1..an)==1,肯定使用操作,则使用操作后->d|2a[i] d|2a[i+1],可以看出最后的d一定整除偶数,所以n个数必须都为偶数.
问题转化为把n个数变为偶数的最小操作次数 a[i]-a[i+1],a[i]+a[i+1],相邻两个odd需要一次操作,相邻odd,even 需要两次操作
贪心:先处理(odd,odd) 在处理(o,e),(e,o)即可
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+20;
ll a
,n;
ll gcd(ll a,ll b)
{
return b==0?a:gcd(b,a%b);
}
int main()
{
while(cin>>n)
{
for(int i=1;i<=n;i++)
scanf("%I64d",&a[i]);
ll d=gcd(a[1],a[2]);
for(int i=3;i<=n;i++)
d=gcd(d,a[i]);
if(d>1)
{
puts("YES");
puts("0");
continue;
}
int ans=0;
for(int i=1;i<n;i++)
{
if(a[i]%2&&a[i+1]%2)
a[i]=0,a[i+1]=0,ans++;//变为任意偶数即可
}
for(int i=1;i<n;i++)
{
if(a[i]%2&&a[i+1]%2==0||(a[i]%2==0&&a[i+1]%2))
a[i]=0,a[i+1]=0,ans+=2;
}
puts("YES");
cout<<ans<<endl;
}
return 0;
}
相关文章推荐
- Codeforces 699 C. Vacations ( 贪心
- codeforces 480A A. Exams(贪心)
- CodeForces 551 C. GukiZ hates Boxes(二分+贪心)
- 【CodeForces 729C】【二分+贪心】Road to Cinema 题解
- 贪心 CodeForces 124B Permutations
- codeforces 767B The Queue【贪心】
- CodeForces 712C Memory and De-Evolution (贪心+暴力)
- Codeforces 680D Bear and Tower of Cubes 贪心 DFS
- codeforces 337C-quiz 贪心加矩阵快速幂
- CodeForces - 140C New Year Snowmen(贪心)
- CodeForces 719B Anatoly and Cockroaches (水题贪心)
- Codeforces 337C Quiz【贪心+快速幂】
- Codeforces 946E - Largest Beautiful Number(贪心、构造)
- CodeForces 732 D.Exams(二分+贪心)
- codeforces 719C (复杂模拟-四舍五入-贪心)
- CodeForces 101D Castle (贪心)
- 【CodeForces】500B - New Year Permutation(Floyd)(贪心)
- 【codeforces 721D】【贪心 堆】D. Maxim and Array 【给出n个数,k次机会,每次使得任意一个数字减少或者加上x,使得最后的乘积最小,最后的n个数大小】
- codeforces 486C Palindrome Transformation 贪心求构造回文
- C - Hacker, pack your bags! Codeforces(贪心)