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 , with 0<p<q≤N.

Input

  The first line of input is an integer T(T≤1000), indicated there are T cases in the file.
For each cases, there is one line with two positive integers N and K.(1≤K<N≤1000000)

Output

  For each case, output a line containing answer.

Sample Input

4
5 1
5 2
5 3
5 4

Sample Output

1/5
1/4
1/3
2/5 昨天陶叔告诉我直接暴力DFS,我当时推出个规律是,最小的一定是 1/n,然后1/n和2/n中间隔着一些分母比n小的分数,我一开始觉得这些分数就是1/(n-1)..(n-i),照此规律,前几个数是可以满足的,后来发现错了,i/n和i+1/n之间隔的分数不可能就是这样能枚举出来,还有一些分子比i大的同样可以存在于里面,所以这个DFS宣告失败。
后来看了下别人代码,发现有个规律就是 1/(n)一定比1/(n-1)小,而 2/(n)一定是比 1/(n-1)大,所以通过这个构建子树,从 1/2开始先向左扩张,找到最小的(即 1/n),然后回退找到父亲那里就是次小的,然后搜右子树,。。其实就是个中序遍历就可以了。
发现写完后,给个符合题目要求的比较大的数据程序直接崩了,我cout了一下,发现是dfs栈开不了那么多,但是在OJ上是可以成功运行的,所以有时候本机会崩的程序好像OJ不一定会崩,别看到大数据本机运行崩了就以为通不过OJ
#include <iostream>
#include <cstdio>
using namespace std;
int n,k;
struct node
{
int p,q;
node operator+(const node &rhs)
{
node nt;
nt.p=p+rhs.p;
nt.q=q+rhs.q;
return nt;
}
};
node ans;
bool dfs(node f1,node f2)
{
if (k==) return ;
node nf=f1+f2;
if (nf.q>n) return false;//边界设置
//cout<<nf.q<<" "<<n<<endl;
bool flag=dfs(f1,nf);
//cout<<nf.q<<endl;
if (flag) return ;
if (!flag)
{
k--;//搜到边界就说明该数肯定为接下来要找的这个次序的值
if (k==){
ans=nf;
return ;
}
}
return dfs(nf,f2);
}
int main()
{
//std::ios::sync_with_stdio(false);
//freopen("naked.in","r",stdin);
//freopen("csu_b.out","w",stdout);
int t;
scanf("%d",&t);
while (t--)
{
scanf("%d%d",&n,&k);
node f=(node){,}; //通过f和nf控制向左子树和右子树走
node nf=(node){,};
//cout<<" pass"<<endl;
dfs(f,nf);
printf("%d/%d\n",ans.p,ans.q);
}
return ;
}

我发现自己代码规范写的真差,今天铁哥也讲了这个,确实要改进

2014_csu选拔1_B的更多相关文章

  1. FZU 1894 志愿者选拔(单调队列)

    传送门 Description 世博会马上就要开幕了,福州大学组织了一次志愿者选拔活动.参加志愿者选拔的同学们排队接受面试官们的面试.参加面试的同学们按照先来先面试并且先结束的原则接受面试官们的考查. ...

  2. [总结]HNOI2015省队选拔

    // 此博文为迁移而来,写于2015年4月21日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102vy9t.html 这次省 ...

  3. FZU 1894 志愿者选拔 (单调队列)

    /****************************************************************** 题目: 志愿者选拔(FZU 1894) 算法: 单调队列 算法思 ...

  4. HDU 2188 悼念512汶川大地震遇难同胞――选拔志愿者(巴什博奕)

    选拔志愿者 题意: 对于四川同胞遭受的灾难,全国人民纷纷伸出援助之手,几乎每个省市都派出了大量的救援人员,这其中包括抢险救灾的武警部队,治疗和防疫的医护人员,以及进行心理疏导的心理学专家.根据要求,我 ...

  5. 1987-A. 集训队选拔

    描述 南邮ACM暑期集训队一年一度的选拔如火如荼的开始了.按照以往的惯例,通过ACM校赛预赛和决赛的两轮选拔,成绩优异者将入选集训队,获得下半年在各大赛区现场赛上与各路神牛角逐奖牌的机会.但是,校赛的 ...

  6. HDU-2188 悼念512汶川大地震遇难同胞——选拔志愿者

    http://acm.hdu.edu.cn/showproblem.php?pid=2188 巴什博奕(Bash Game)的转换:换一种说法而已 悼念512汶川大地震遇难同胞——选拔志愿者 Time ...

  7. HDOJ 2188 悼念512汶川大地震遇难同胞——选拔志愿者

    Problem Description 对于四川同胞遭受的灾难,全国人民纷纷伸出援助之手,几乎每个省市都派出了大量的救援人员,这其中包括抢险救灾的武警部队,治疗和防疫的医护人员,以及进行心理疏导的心理 ...

  8. hdu 2188 选拔志愿者(sg博弈)

    Problem Description 对于四川同胞遭受的灾难,全国人民纷纷伸出援助之手,几乎每个省市都派出了大量的救援人员,这其中包括抢险救灾的武警部队,治疗和防疫的医护人员,以及进行心理疏导的心理 ...

  9. 51Nod 1182 完美字符串(字符串处理 贪心 Facebook Hacker Cup选拔)

    1182 完美字符串             题目来源:                         Facebook Hacker Cup选拔         基准时间限制:1 秒 空间限制:1 ...

随机推荐

  1. 020、MySQL创建一个存储过程,显示存储过程,调用存储过程,删除存储过程

    一.我们创建一个MySQL储存过程,在SQL代码区写入以下内容,并执行就可以了 #编写一个存储过程 CREATE PROCEDURE ShowDate ( ) BEGIN #输出当前时间 SELECT ...

  2. 007-PHP变量和函数相互转换

    <?php function write($text) //定义function write()函数 { print($text); //打印字符串 } function writeBold($ ...

  3. eshop3-JDK 安装

    1. 下载软件:http://learning.happymmall.com/ 2. 清理系统默认的JDK rpm  -qa | grep jdk 查看已经安装的JDK,然后卸载 查看的结果:jdk1 ...

  4. python SSTI tornado render模板注入

    原理tornado render是python中的一个渲染函数,也就是一种模板,通过调用的参数不同,生成不同的网页,如果用户对render内容可控,不仅可以注入XSS代码,而且还可以通过{{}}进行传 ...

  5. 使用Vue+JFinal框架搭建前后端分离系统

    前后端分离作为Web开发的一种方式,现在应用越来越广泛.前端一般比较流行Vue.js框架,后端框架比较多,网上有很多Vue+SpringMVC前后端分离的demo,但是Vue+JFinal框架貌似没有 ...

  6. c#查看本机网络端口和对应的程序名

    360安全卫士里面有个组件叫流量防火墙,感觉挺好用,但是不想安装360全家桶,于是自己捣鼓着用C#写一个比较简化的版本. 查看电脑上开启的TCP或UDP端口,可以用netstat命令,netstat用 ...

  7. 统计返回的Decimal/long型数据转换问题

    mysql数据库在进行统计时候,返回的count()是个long型,sum()返回的是bigDecimal类型,前段需要的是int型故而需要进行转换. <select id="getD ...

  8. javacv 通过rtsp 获取视频流 设置帧率

    原文章:https://blog.csdn.net/eguid_1/article/details/52680802 原代码: /** * 按帧录制视频 * * @param inputFile-该地 ...

  9. 浅谈arduino的bootloader

    在arduino的板子上,作为核心的avr单片机往往都会烧录一个bootloader,这个叫做bootloader的东东其实是arduino研发团队针对arduino板子开发的一小段代码,借助于这段代 ...

  10. 一百一十三、SAP的SCAT录屏操作,类似按键精灵可用于批量修改数据

    一.输入事务代码SCAT,输入Z开头的程序名,点击左上角的新建图标 二.输入标题和模块名 三.保存为本地对象 四.包属性修改为CATT,然后保存 五.可以看到我们新建的一条内容,点击小铅笔修改 六.点 ...