Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)
Problem Description
Here is no naked girl nor naked runners, but a naked problem: you are to find the K-th smallest element in the set of all irreducible fractions p/q,with 0<p<q<=N.
Input
The first line of input is an integer T(T<=1000), indicating there are T cases.
For each cases, there is one line with two positive integers N and K(1<=K<N<=100000).
For each cases, there is one line with two positive integers N and K(1<=K<N<=100000).
Output
For each case, output one line containing the answer.
Sample Input
4 5 1 5 2 5 3 5 4
Sample Output
1/5 1/4 1/3 2/5
#include<iostream> #include<cstdio> using namespace std; const int size = 1000010; int a1[size],a2[size],b1[size],b2[size],s[size]; int main() { // freopen("a.txt","r",stdin); int t, n, k, a, b; cin >> t; while(t --) { cin >> n >> k; a1[0] = s[0] = 0; b1[0] = a2[0] = b2[0] = 1; int i = 0; while(1) { a = a1[i] + b1[i]; b = a2[i] + b2[i]; if(b > n) i --; else if(s[i] == 0) { a1[i + 1] = a1[i]; a2[i + 1] = a2[i]; b1[i + 1] = a; b2[i + 1] = b; s[i] ++; i ++; s[i] = 0; } else { k --; if(k == 0) break; a1[i] = a; a2[i] = b; s[i] = 0; } } printf("%d/%d\n",a,b); } return 0; }