HDU 5584 LCM Walk【搜索】
2016-04-27 11:13
399 查看
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=5584题意:
分析:
这题比赛的时候卡了很久,一直在用数论的方法解决。其实从终点往前推就可以发现,整个过程中的点的gcd都是一样的,利用这个性质倒着搜索一遍就好了。
相同的gcd均为gcd(6,10)
以(6,10)为例,假设倒数第二个点到达(6−x∗gcd,10),那么x=(6−x∗gcd)∗10/gcd,设6=k1∗gcd, 10=k2∗gcd,那么x满足x=k1∗k2/(k2+1),每次只要判断k2+1是否能被k1整除就可以了。
代码:
#include<iostream> using namespace std; int gcd(int a, int b){ return b?gcd(b, a % b):a;} int cnt = 0; int g; int c = 1; void dfs(int a, int b) { if(a < 1 || b < 1) return ; cnt++; if(a % (b + 1) == 0) dfs(a / (b + 1), b); if(b % (a + 1) == 0) dfs(a, b/(a + 1)); } int main (void) { int T;cin>>T; while(T--){ int x, y; cin>>x>>y; g = gcd(x, y); x /= g; y /= g; cnt = 0; dfs(x, y); cout<<"Case #"<<c<<": "<<cnt<<endl; c++; } return 0; }
相关文章推荐
- 从零安装liferay7
- Java异常总结
- 三帧差分算法
- 有return的情况下try catch finally的执行顺序
- Bootstrap(七) Bootstrap支持的JavaScript插件
- 熟悉linux的基本操作
- openssl 链接服务器
- [CareerCup] 17.10 Encode XML 编码XML
- Git:代码冲突常见解决方法
- Docker集群管理之Docker Machine
- ZOJ 3944 People Counting(模拟+暴力)
- easyui表格复选框的全选键是否选中
- linux查看java jdk安装路径和设置环境变量
- jquery的deferred使用详解
- 搬家啦!
- cocos2d-C++ 学习UI控件(四)之 Slider|ListView
- android面试题(一)
- mysql tee config
- Android 回调接口
- ReentrantReadWriteLock 可重入的读写锁