Description
An infinite full binary tree labeled by positive rational numbers is defined by:
• The label of the root is 1/1.
• The left child of label p/q is p/(p+q).
• The right child of label p/q is (p+q)/q.
The top of the tree is shown in the following figure:
A rational sequence is defined by doing a level order (breadth first) traversal of the tree (indicated
by the light dashed line). So that:
F(1) = 1/1, F(2) = 1/2, F(3) = 2/1, F(4) = 1/3, F(5) = 3/2, F(6) = 2/3, . . .
Write a program to compute the n-th element of the sequence, F(n). Does this problem sound
familiar? Well it should! We had variations of this problem at the 2014 and 2015 Greater NY Regionals.Input
The first line of input contains a single integer P, (1 ≤ P ≤ 1000), which is the number of data sets
that follow. Each data set should be processed identically and independently.
Each data set consists of a single line of input. It contains the data set number, K, and the index,
N, of the sequence element to compute (1 ≤ N ≤ 2147483647).Output
For each data set there is a single line of output. It contains the data set number, K, followed by a
single space which is then followed by the numerator of the fraction, followed immediately by a forward
slash (‘/’) followed immediately by the denominator of the fraction. Inputs will be chosen so neither
the numerator nor the denominator will overflow an 32-bit unsigned integer.Sample Input
4
1 1
2 4
3 11
4 1431655765Sample Output
1 1/1
2 1/3
3 5/2
4 2178309/1346269
题解:
根据二叉树性质和所给公式递推(暴力
代码如下:
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<string>
#include<vector>
#include<cmath>
#include<stack>
#include<queue>
#include<map>
#include<set>
#define max(a,b) (a>b?a:b)
#define min(a,b) (a<b?a:b)
#define swap(a,b) (a=a+b,b=a-b,a=a-b)
#define maxn 27
#define N 100000000
#define INF 0x3f3f3f3f
#define mod 1001113
#define e 2.718281828459045
#define eps 1.0e18
#define PI acos(-1)
#define lowbit(x) (x&(-x))
#define read(x) scanf("%d",&x)
#define put(x) prllf("%d\n",x)
#define memset(x,y) memset(x,y,sizeof(x))
#define Debug(x) cout<<x<<" "<<endl
#define lson i << 1,l,m
#define rson i << 1 | 1,m + 1,r
#define ll long long
//std::ios::sync_with_stdio(false);
//cin.tie(NULL);
//const int maxn=;
using namespace std;
struct ttt
{
ll a;
ll b;
}s,f;
ttt qaq(ll n)
{
if(n==1)
{
s.a=1;
s.b=1;
}
else if(n%2==0)
{
f=qaq(n/2);
s.a=f.a;
s.b=f.a+f.b;
}
else
{
f=qaq(n/2);
s.a=f.a+f.b;
s.b=f.b;
}
return s;
}
int main()
{
int t;
cin>>t;
while(t--)
{
ll p,n;
cin>>p>>n;
qaq(n);
cout<<p<<" "<<s.a<<"/"<<s.b<<endl;
}
return 0;
}