洛谷 CF798C Mike and gcd problem
嗯...
题目链接:https://www.luogu.org/problemnew/show/CF798C
这道题首先要会写gcd..也类似一种找规律吧...
问题的操作是在两个数的基础上进行的:
那么我们不妨只考虑两个数的操作,手写几组数据不难发现,所有写出来的两个数A.B,都会在至多两次操作内完成任务。那么我们可以考虑其性质:
两个数A.B.无非四种情况:
奇数,奇数--------------->操作后变成 偶数,偶数
奇数,偶数--------------->操作后变成 奇数,奇数
偶数,奇数--------------->操作后变成 奇数,奇数
偶数,偶数--------------->操作后变成 偶数,偶数
所以:
如果原来两个数都是偶数的话,那么操作数为0.
如果原来两个数都是奇数的话,那么操作数为1.
如果原来两个数是一奇一偶的话,那么操作数为2.
其一定不会出现结果是(3 ,6)这种情况的,除非原序列就是这样的。
所以,最后再加几个特判即可:
如果n == 1,其gcd一定是1,所以直接输出即可;
如果gcd在不操作之前已经大于1了,直接输出即可;
其他情况再讨论奇偶性即可...(注意这道题不存在无解的情况,前面已经解释过)....
AC代码:
#include<iostream>
#include<cstdio> using namespace std; int n, a[], ans; int gcd(int a, int b){
if(b == )
return a;
return gcd(b, a % b);
} int main(){
scanf("%d", &n);
for(int i = ; i <= n; i++)
scanf("%d", &a[i]);
if(n == ){
printf("YES\n0\n");
return ;
}//特判
int now = gcd(a[], a[]);
for(int i = ; i <= n; i++)
now = gcd(a[i], now);//gcd
if(now != ){
printf("YES\n0\n");
return ;
}//特判
else{
a[n + ] = ;
for(int i = ; i <= n; i++){
if(a[i] % == && a[i + ] % == ){
ans++;
a[i + ] = ;//已经操作成偶数,所以赋值成任何一个偶数都可
}
else if(a[i] % == && a[i + ] % == )//一奇一偶
ans += ;
}
printf("YES\n%d\n", ans);
}
return ;
}
AC代码
洛谷 CF798C Mike and gcd problem的更多相关文章
- CF798C Mike and gcd problem
思路: 首先如果数列的最大公约数大于1,直接输出即可. 否则,设对原数列中的ai和ai+1进行一次操作,分别变为ai - ai+1和ai + ai+1.设新数列的最大公约数为d,则由于d|(ai - ...
- 【算法系列学习】codeforces C. Mike and gcd problem
C. Mike and gcd problem http://www.cnblogs.com/BBBob/p/6746721.html #include<iostream> #includ ...
- CF798 C. Mike and gcd problem
/* CF798 C. Mike and gcd problem http://codeforces.com/contest/798/problem/C 数论 贪心 题意:如果一个数列的gcd值大于1 ...
- 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 ...
- 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); ...
- 洛谷 P2257 YY的GCD
洛谷 P2257 YY的GCD \(solution:\) 这道题完全跟[POI2007]ZAP-Queries (莫比乌斯反演+整除分块) 用的一个套路. 我们可以列出答案就是要我们求: \(ans ...
- 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 ...
- #410div2C. Mike and gcd problem
C. Mike and gcd problem time limit per test 2 seconds memory limit per test 256 megabytes input stan ...
- 【洛谷p1601】A+B Problem(高精)
高精度加法的思路还是很简单容易理解的 A+B Problem(高精)[传送门] 洛谷算法标签: 附上代码(最近懒得一批) #include<iostream> #include<cs ...
随机推荐
- eclipse报错:unable to install breakpoint in .......due to missing line number attributes
报错信息如下: 解决方案方案1.把断点都干掉,再启动.应该是代码更新后,断点位置没有代码了或位置改变了. 方案2.在Eclipse - Preferences - Java - Complier 下 ...
- 浅谈DAO工厂设计模式(工厂模式的好处)
随着软件分层设计的流行及广泛的应用,对于DAO的设计模式大家已经不再陌生了,DAO层已经在软件系统的开发中成为必不可少的一层,将后台的数据层和前台的VO进行分离.前段时间也针对于DAO的设计介绍过一个 ...
- thinkphp新的心得
1,代码的高度复用 1,js的删除,弹出框都可以用嵌入的js,不用每个页面都写 2,控制器的初始化函数可以实现配置某些变量,比如admin模块的topic控制器的初始化函数可以 $this->o ...
- 8.14-T1村通网(pupil)
题目大意 要建设一个村庄的网络 有两种操作可选 1.给中国移动交宽带费,直接连网,花费为 A. 2.向另外一座有网的建筑,安装共享网线,花费为 B×两者曼哈顿距离. 题解 显然的最小生成树的题 见 ...
- configure: error: no acceptable C compiler found in $PATH 解决
在安装keepalived时报错 ./configure --prefix=/usr/local/ccbase/keepalived-2.0.15 && make && ...
- const和defin区别
(1)类型的安全性检查:const常量有数据类型,而define定义宏常量没有数据类型.则编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全检查(字符替换时可能会产生意料不到的错误 ...
- 每天进步一点点------SOPC TIMER (一)
寄存器图 可以通过操作以下的寄存器来实现对timer(定时器)内核的操作(仅描述32位计数器) 状态寄存器: TO(timeout) :计数器计数到0时,该位置1,之后TO位的值会保持,直到手动清零, ...
- 基于jenkins自动打包并部署docker环境及PHP环境
- 解决MinGW运行时提示丢失libgmp-10.dll
如何解决刚安装的MinGW提示"丢失xxx.dll" 解决方案: 1.配置环境变量,出现这种问题的主要原因是因为没配置环境变量,网上的大多数解决方案也是基于这个的. 2.安装包损坏 ...
- 深入delphi编程理解之消息(四)使用TWMSysCommand结构体的WM_SysCommand消息应用
通过以下实例拦截窗体WM_SysCommand消息,我们可以获取到很多有趣的数据. 一.程序界面 二.程序代码 unit Unit1; interface uses Windows, Messages ...