【题目链接】:http://codeforces.com/contest/798/problem/C

【题意】



给你n个数字;

要求你进行若干次操作;

每次操作对第i和第i+1个位置的数字进行;



a[i]变为a[i]-a[i+1],a[i+1]变为a[i]+a[i+1];

然后问你能不能通过以上变换使得最后所有元素的gcd>1

【题解】



答案总是存在的;

因为把这个操作进行两次可以得到-2*a[i+1],2*a[i]

也就是如果对每相邻的元素进行操作,最后都能使得这两个元素都变成偶数;

最后gcd最少都为2了;

则:

如果一开始所有元素的gcd>1则直接输出0;

等于1;

假设改变一次后的gcd为d

则d|a[1..i-1]且d|a[i+2..n]

且d|a[i]-a[i+1]且d|a[i]+a[i+1]

因为由d|x和d|y可以得到

d|x+y以及d|x-y

所以

d|2*a[i]且d|2*a[i+1]

这样就大概猜测要使得每个元素都变成偶数吧.

每个元素都贪心地让他变成偶数就好了;

(有了“这个操作进行两次可以得到-2*a[i+1],2*a[i]”这个结论,我们可以放心地进行贪心,当然不一定是都要进行两次操作,比如a[i]和a[i+1]都是奇数,则只要进行一次操作,因为一次操作后两个数的奇偶性都会因为加、减了一个奇数而发生改变);

只要第i个元素没有变成偶数就一直进行这个操作;

然后第n个元素如果最后在前n-1个元素进行操作之后没有变成偶数;

则必然可以对n-1,n操作两次使得a[n-1]保留仍旧是偶数,a[n]也变成了偶数;

因为

a[n-1]是偶数了,a[n]是奇数

第一次操作后

a[n-1]变成奇数,a[n]还是奇数;

再进行一次操作后

a[n-1]变成偶数,a[n]也变成偶数;

具体看代码



【Number Of WA】



1



【完整代码】

#include <bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define ms(x,y) memset(x,y,sizeof x) typedef pair<int,int> pii;
typedef pair<LL,LL> pll; const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int N = 1e5+100;
const int INF = 21e8; int n;
LL a[N],now; LL gcd(LL a,LL b)
{
if (b==0)
return a;
else
return gcd(b,a%b);
} LL tgcd(LL a,LL b)
{
return gcd(abs(a),abs(b));
} void change(int x,int y)
{
LL ta = a[x]-a[y],tb = a[x]+a[y];
a[x] = ta,a[y] = tb;
} int main()
{
//cout << tgcd(12,3)<<endl;
//freopen("F:\\rush.txt","r",stdin);
ios::sync_with_stdio(false),cin.tie(0);//scanf,puts,printf就别用了!
cin >> n;
rep1(i,1,n)
cin >> a[i];
now = tgcd(a[1],a[2]);
rep1(i,3,n)
now = tgcd(now,a[i]);
cout <<"YES"<<endl;
if (now>1)
{
cout <<0<<endl;
return 0;
}
int ans = 0;
for (int i = 1;i <= n-1;i++)
{
while ((a[i]%2)!=0)
{
change(i,i+1);
ans++;
}
}
while ((a[n]%2)!=0)
{
change(n-1,n);
ans++;
}
cout << ans << endl;
return 0;
}

【codeforces 798C】Mike and gcd problem的更多相关文章

  1. 【codeforces 798A】Mike and palindrome

    [题目链接]:http://codeforces.com/contest/798/problem/A [题意] 让你严格改变一个字符,使得改变后的字符串为一个回文串; 让你输出可不可能; [题解] 直 ...

  2. 【codeforces 798B】Mike and strings

    [题目链接]:http://codeforces.com/contest/798/problem/B [题意] 给你n个字符串; 每次操作,你可以把字符串的每个元素整体左移(最左边那个字符跑到最后面去 ...

  3. 【codeforces 742B】Arpa’s obvious problem and Mehrdad’s terrible solution

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  4. 【codeforces 798D】Mike and distribution

    [题目链接]:http://codeforces.com/contest/798/problem/D [题意] 让你选一个下标集合 p1,p2,p3..pk 使得2*(a[p1]+a[p2]+..+a ...

  5. codeforces 798 C. Mike and gcd problem(贪心+思维+数论)

    题目链接:http://codeforces.com/contest/798/problem/C 题意:给出一串数字,问如果这串数字的gcd大于1,如果不是那么有这样的操作,删除ai, ai + 1 ...

  6. 【算法系列学习】codeforces C. Mike and gcd problem

    C. Mike and gcd problem http://www.cnblogs.com/BBBob/p/6746721.html #include<iostream> #includ ...

  7. Codeforces 798C. Mike and gcd problem 模拟构造 数组gcd大于1

    C. Mike and gcd problem time limit per test: 2 seconds memory limit per test: 256 megabytes input: s ...

  8. Codeforces Round #410 (Div. 2)C. Mike and gcd problem

    题目连接:http://codeforces.com/contest/798/problem/C C. Mike and gcd problem time limit per test 2 secon ...

  9. codeforces#410C Mike and gcd problem

    题目:Mike and gcd problem 题意:给一个序列a1到an ,如果gcd(a1,a2,...an)≠1,给一种操作,可以使ai和ai+1分别变为(ai+ai+1)和(ai-ai+1); ...

随机推荐

  1. 使用Carthage安装及使用第三方库

    CocoaPods 安装不了,只好使用Carthage 参考:http://www.jianshu.com/p/52dff4cef8a2 http://www.jianshu.com/p/bf263c ...

  2. jQuery总结04

    1 JavaScript 中的 AJAX 的四个实现步骤分别是? 2 如何处理 XMLHttpRequest 对象的兼容问题? 3 jQuery 中的 AJAX 4 jQuery 选择器包括哪些? 5 ...

  3. 【POJ 1475】 Pushing Boxes

    [题目链接] http://poj.org/problem?id=1475 [算法] 双重BFS [代码] #include <algorithm> #include <bitset ...

  4. Principal Component Analysis ---- PRML读书笔记

    To summarize, principal component analysis involves evaluating the mean x and the covariance matrix ...

  5. android 从assets和res中读取文件(转)

    1. 相关文件夹介绍      在Android项目文件夹里面,主要的资源文件是放在res文件夹里面的.assets文件夹是存放不进行编译加工的原生文件,即该文件夹里面的文件不会像xml,java文件 ...

  6. Python 38 sql基础

    数据库服务器中存放的是 库(文件加)  .表(文件) .表里面是记录(一行数据) 增     删     改     查 1.库相关 创建------------------create databa ...

  7. windows10+arch linux双系统 uefi启动

    安装前的准备Archlinux 安装ISO镜像,下载:http://mirrors.163.com/archlinux/iso/2013.05.01/U盘一个,最好1G以上,格式化成FAT32.把下载 ...

  8. JQuery 遍历没有id的控件

    html代码: <tr> <td field="ck" > <div><input type="checkbox" / ...

  9. spring整合redis客户端及缓存接口设计

    一.写在前面 缓存作为系统性能优化的一大杀手锏,几乎在每个系统或多或少的用到缓存.有的使用本地内存作为缓存,有的使用本地硬盘作为缓存,有的使用缓存服务器.但是无论使用哪种缓存,接口中的方法都是差不多. ...

  10. 复习HTML+CSS(8)

    n  普通框架 框架技术:将一个浏览器划分成若干个小窗口,每个小窗口显示一个独立的网页. 框架集合框架页 u  框架集<frameset>:主要用来划分窗口的. u  框架页<fra ...