CodeForces - 798C Mike and gcd problem (贪心+思维)
2018-01-08 17:59
363 查看
题目链接:http://codeforces.com/problemset/problem/798/C点击打开链接
C. Mike and gcd problem
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
Mike has a sequence A = [a1, a2, ..., an] of
length n. He considers the sequence B = [b1, b2, ..., bn] beautiful
if the gcd of all its elements is bigger than 1,
i.e.
.
Mike wants to change his sequence in order to make it beautiful. In one move he can choose an index i (1 ≤ i < n),
delete numbers ai, ai + 1 and
put numbers ai - ai + 1, ai + ai + 1 in
their place instead, in this order. He wants perform as few operations as possible. Find the minimal number of operations to make sequence A beautiful
if it's possible, or tell him that it is impossible to do so.
is
the biggest non-negative number d such that d divides bi for
every i (1 ≤ i ≤ n).
Input
The first line contains a single integer n (2 ≤ n ≤ 100 000)
— length of sequence A.
The second line contains n space-separated integers a1, a2, ..., an (1 ≤ ai ≤ 109)
— elements of sequence A.
Output
Output on the first line "YES" (without quotes) if it is possible to make sequence A beautiful
by performing operations described above, and "NO" (without quotes) otherwise.
If the answer was "YES", output the minimal number of moves needed to make sequence A beautiful.
Examples
input
output
input
output
input
output
Note
In the first example you can simply make one move to obtain sequence [0, 2] with
.
In the second example the gcd of the sequence is already greater than 1.
题意是 如果一个序列满足所有序列里数的gcd不为1 为好序列
现在可以使用操作把 ai ai+1变成 ai-ai+1 ai+ai+1
问最少需要多少次
稍微算两个数就可以发现
在对同一队数操作两次之后结果为 -2ai+1 2ai
而此时必有gcd>1
因此这样每个序列都一定有解
再来考虑操作次数的问题
显然 当两个数中同样是偶数时 无需操作
两个数一奇一偶 则需操作两次
两个都是奇数 操作一次
这样我们贪心尽量让两个相邻的奇数凑在一起操作即可
注意需要判断原序列是否本身就是好序列
C. Mike and gcd problem
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
Mike has a sequence A = [a1, a2, ..., an] of
length n. He considers the sequence B = [b1, b2, ..., bn] beautiful
if the gcd of all its elements is bigger than 1,
i.e.
.
Mike wants to change his sequence in order to make it beautiful. In one move he can choose an index i (1 ≤ i < n),
delete numbers ai, ai + 1 and
put numbers ai - ai + 1, ai + ai + 1 in
their place instead, in this order. He wants perform as few operations as possible. Find the minimal number of operations to make sequence A beautiful
if it's possible, or tell him that it is impossible to do so.
is
the biggest non-negative number d such that d divides bi for
every i (1 ≤ i ≤ n).
Input
The first line contains a single integer n (2 ≤ n ≤ 100 000)
— length of sequence A.
The second line contains n space-separated integers a1, a2, ..., an (1 ≤ ai ≤ 109)
— elements of sequence A.
Output
Output on the first line "YES" (without quotes) if it is possible to make sequence A beautiful
by performing operations described above, and "NO" (without quotes) otherwise.
If the answer was "YES", output the minimal number of moves needed to make sequence A beautiful.
Examples
input
2 1 1
output
YES 1
input
3 6 2 4
output
YES 0
input
2 1 3
output
YES 1
Note
In the first example you can simply make one move to obtain sequence [0, 2] with
.
In the second example the gcd of the sequence is already greater than 1.
题意是 如果一个序列满足所有序列里数的gcd不为1 为好序列
现在可以使用操作把 ai ai+1变成 ai-ai+1 ai+ai+1
问最少需要多少次
稍微算两个数就可以发现
在对同一队数操作两次之后结果为 -2ai+1 2ai
而此时必有gcd>1
因此这样每个序列都一定有解
再来考虑操作次数的问题
显然 当两个数中同样是偶数时 无需操作
两个数一奇一偶 则需操作两次
两个都是奇数 操作一次
这样我们贪心尽量让两个相邻的奇数凑在一起操作即可
注意需要判断原序列是否本身就是好序列
#include <bits/stdc++.h> using namespace std; int gcd(int x,int y) { if(x<y) swap(x,y); if(y==0) return x; return gcd(y,x%y); } int main() { int n; cin >> n; vector<int > s; for(int i=0;i<n;i++) { int mid; cin >>mid; s.push_back(mid); } int ggcd=s[0]; for(int i=0;i<n;i++) { ggcd=gcd(ggcd,s[i]); } int ans=0; for(int i=0;i<n;i++) { if(s[i]&1) { if(i!=n-1) { if(s[i+1]&1) { ans++; i++; } else { ans+=2; i++; } } else ans+=2; } } //cout << ggcd << endl; cout << "YES" << endl; if(ggcd!=1) ans=0; cout << ans << endl; }
相关文章推荐
- codeforces-232【A贪心、思维、图】
- 【CodeForces - 849】C From Y to Y 【思维+构造+贪心】
- codeforces-508C-Anya and Ghosts【贪心】【思维】
- CodeForces - 818B Permutation Game(贪心+思维)
- Codeforces 672C Recycling Bottles【极限思维+贪心枚举】
- CodeForces - 808C-贪心-思维
- codeforces 500C New Year Book Reading (贪心+思维)
- CodeForces - 827B High Load(贪心+思维)
- CodeForces 721D. Maxim and Array(贪心,思维题)
- Codeforces 478C Table Decorations【贪心】【思维】
- Codeforces 344C Rational Resistance【思维+贪心】
- Codeforces 584E Anton and Ira【思维+贪心】好题~
- codeforces-500【B思维】【C贪心】
- Codeforces-540B-School Marks(思维贪心)
- Codeforces 320E Kalila and Dimna in the Logging Industry【思维+贪心+斜率优化Dp】好题!
- Codeforces 349B Color the Fence【贪心+思维】
- 【CodeForces - 798C Mike and gcd problem】 思维+贪心
- CodeForces 707B Bakery(思维+贪心)
- Codeforces 807E Prairie Partition 贪心思维+二分
- codeforces 500C New Year Book Reading (贪心,很好的思维题)