【ACdream 1187】Rational Number Tree(树,递归)
2016-07-23 00:49
246 查看
有理数的树,根节点是1/1,左儿子是1/2,右儿子是2/1...。求给定的分数是第几个,或者给定n求第n个分数。
递归。
给定的分数,每次递归,如果分子比较小,就用分母减去分子,并且这是左儿子。反之是右儿子,终点是分子分母相等。
求第n个,每次递归,如果n是奇数(为右儿子),新的分子是分子加分母。终点是n==1即到树根了,分子分母为1。
递归。
给定的分数,每次递归,如果分子比较小,就用分母减去分子,并且这是左儿子。反之是右儿子,终点是分子分母相等。
求第n个,每次递归,如果n是奇数(为右儿子),新的分子是分子加分母。终点是n==1即到树根了,分子分母为1。
#include<iostream> #define ll unsigned long long using namespace std; ll n,p,q,ans; void solve(ll n){ if(n==1){ p=1; q=1; return; } solve(n>>1); if(n%2) p+=q; else q+=p; } void work(){ if(p==q){ ans=1; return; } if(p>q){ p-=q; work(); ans=ans<<1|1; }else{ q-=p; work(); ans<<=1; } } int main(){ int t,op; cin>>t; for(int i=1;i<=t;i++){ cin>>op; cout<<"Case #"<<i<<": "; if(op==1){ cin>>n; solve(n); cout<<p<<" "<<q<<"\n"; }else{ cin>>p>>q; work(); cout<<ans<<"\n"; } } }
相关文章推荐
- 液压破碎锤
- python 常用运算符
- ChartView QML 类型翻译
- NodeMCU多串口通信(轮询)
- gradle多渠道打包
- mybatis
- unison+inotify实现web数据双向同步配置详解
- Core_1_数据结构和函数
- lucene源码分析---4
- error C3861: “LOG4CPLUS_DEBUG”: 找不到标识
- PAT甲级.1001. A+B Format (20)
- IOS学习之蓝牙4.0
- 实现web数据同步的四种方式
- mongodb笔记 getting started
- 16. Spring Boot使用Druid(编程注入)【从零开始学Spring Boot】
- java内存模型笔记深入
- UVa 10003
- ListView条目焦点获取不到问题解决
- iOS-环信SDK讲解
- Hibernate学习笔记----双向多对多关联