[Swust OJ 491]--分数的位置(简单版)

题目链接:http://acm.swust.edu.cn/problem/0491/

Time limit(ms): 1000        Memory limit(kb): 65535

Description

将所有的分母小于N的真分数(分子小于分母,数值小于1)从小到大排列出来后,例如当N=4时,所有的真分数有1/4,1/3,1/2,2/3,3/4。其中第三个真分数为1/2,其分子为1,分母为2。编一个程序,对给定的N,求出第M个真分数的值。

Input

测试数据有多组,每组测试数据有两行: 
第一行有一个数N(3<=N<=10^3),第二行为一个数字M(3<=M<=10^5)。

Output

输出文件中对应每组测试数据输出一行,该行为这个真分数.无空格,见Sample Output.

Sample Input


4

3

5

2

Sample Output


1/2

1/4

输入数据保证输出合法.

Hint

SCPC_周伟

解题思路:这道题我的思路就是把所有的分子分母最大公约数为1的分数存贮起来(由于使用的两个for,并没有按大小来,需要排序),排序后输出对应的分数

     这里需要确定数组大小,就是在分母小于n的情况下的数字,这里运用全排列来考虑,最多1000*100*10个组合满足,然后就能愉快的ac了~~~~

     比价两个分数大小a/b<c/d满足关系式a*d<b*c~~~

看提交记录有学长0ms秒过的,应该是找到了递推公式(然而我并没有找到),先看看这个搓代码吧Orz~~~

代码如下:

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstdio>
 4 #define maxn 1000010
 5 using namespace std;
 6 struct node{
 7     int x, y;
 8     bool operator<(const node &tmp)const{
 9         if (x != tmp.x)
10             return x*tmp.y < y*tmp.x;
11         return y > tmp.y;
12     }
13 }a[maxn];
14 int gcd(int a, int b){
15     return !b ? a : gcd(b, a%b);
16 }
17 int main(){
18     int n, m;
19     while (~scanf("%d%d", &n, &m)){
20         int pos = 0;
21         //i代表分母,j代表分子
22         for (int i = 1; i <= n; i++){
23             for (int j = 1; j < i; j++){
24                 if (i == 1 && j == 1)
25                     continue;
26                 if (gcd(j, i) == 1){
27                     a[pos].x = j;
28                     a[pos++].y = i;//  x/y
29                 }
30             }
31         }
32         sort(a, a + pos);
33         printf("%d/%d\n", a[m - 1].x, a[m - 1].y);
34     }
35     return 0;
36 }
37
38 //排序也可以这么单独写,看个人习惯
39 /*int cmp(node a, node b){
40     if (a.x == b.x)
41         return a.y > b.y;
42     return a.x*b.y < a.y*b.x;
43 }*/

时间: 2024-10-29 19:05:55

[Swust OJ 491]--分数的位置(简单版)的相关文章

线段树 [SWUST OJ 764] 校门外的树 Plus Plus

校门外的树 Plus Plus(0764) Time limit(ms): 1000 Memory limit(kb): 65535 Submission: 214 Accepted: 15 Description 西南某科技大学的校门外长度为 L 的公路上有一排树,每两棵相邻的树之间的间隔都是 1 米.我们可以把马路看成一个数轴,马路的一端在数轴 1 的位置,另一端在 L 的位置:数轴上的每个整数点,即 1,2,……,L,都种有一棵树. 现在要将这排树的某一段涂成某种颜色,给定 N 组区间[ 

[Swust OJ 404]--最小代价树(动态规划)

题目链接:http://acm.swust.edu.cn/problem/code/745255/ Time limit(ms): 1000 Memory limit(kb): 65535 Description 以下方法称为最小代价的字母树:给定一正整数序列,例如:4,1,2,3,在不改变数的位置的条件下把它们相加,并且用括号来标记每一次加法所得到的和. 例如:((4+1)+ (2+3))=((5)+(5))=10.除去原数不4,1,2,3之外,其余都为中间结果,如5,5,10,将中间结果相加

模板】AC自动机(简单版)

模板]AC自动机(简单版) https://www.luogu.org/problemnew/show/P3808 这是一道简单的AC自动机模板题. 用于检测正确性以及算法常数. 为了防止卡OJ,在保证正确的基础上只有两组数据,请不要恶意提交. 管理员提示:本题数据内有重复的单词,且重复单词应该计算多次,请各位注意 题目描述 给定n个模式串和1个文本串,求有多少个模式串在文本串里出现过. 输入输出格式 输入格式: 第一行一个n,表示模式串个数: 下面n行每行一个模式串: 下面一行一个文本串. 输

C++ 简单版STL list 链表(迭代器版)

最近课程开始上设计模式了. 苦于天天满课的状态,不过题目可以放到晚上去刷. 周末师大校赛挺有趣的,题目质量好高. 花了几天写LIST,一开始就想写出 跟STL用法一样的LIST, 加个迭代器然后循环着自己用. 结果发现!!!!好多坑,有C++ 模板 C++ 符号重载等等. 不过也提高了点C++ 代码能力.感觉迭代器就是对node的封装..... #include <iostream> #include <cstdio> #include <list> #include

【模板】AC自动机(简单版)

题目背景 通过套取数据而直接“打表”过题者,是作弊行为,发现即棕名. 这是一道简单的AC自动机模板题. 用于检测正确性以及算法常数. 为了防止卡OJ,在保证正确的基础上只有两组数据,请不要恶意提交. 管理员提示:本题数据内有重复的单词,且重复单词应该计算多次,请各位注意 题目描述 给定n个模式串和1个文本串,求有多少个模式串在文本串里出现过. 输入格式 第一行一个n,表示模式串个数: 下面n行每行一个模式串: 下面一行一个文本串. 输出格式 一个数表示答案 输入输出样例 输入 #1复制 2 a

分享一个近期写的简单版的网页采集器

分享一个近期写的简单版的网页采集器 功能特点: 1.可通过配置,保存采集规则. 2.可通过采集规则,进行数据采集. 3.可分页,分关键字,进行采集. 4.可保存数据至数据库,文本中. ........... 功能还比较简单,喜欢深入的可以继续深入下去,暂时还没有登录的功能,因为登录功能涉及到的范围比较广,待日后慢慢研究后再开发. 我先上个图让大家一睹为快吧: 首先看看页面,我们要采集这个网站的文章 接下来,首先是查找分页,获得分页里面的文章链接,接着查找内容页需要采集的字段,生成规则,进行采集.

swust oj 1026--Egg pain&#39;s hzf

题目链接:http://acm.swust.edu.cn/problem/1026/ Time limit(ms): 3000 Memory limit(kb): 65535 hzf is crazy about reading math recently,and he is thinking about a boring problem. Now there are n integers Arranged in a line.For each integer,he wants to know

SWUST OJ Euclid&#39;s Game(0099)

Euclid's Game(0099) Time limit(ms): 1000 Memory limit(kb): 65535 Submission: 1855 Accepted: 589 Description Starts with two unequal positive numbers (M,N and M>N) on the board. Two players move in turn. On each move, a player has to write on the boar

Java实现简单版SVM

最近的图像分类工作要用到latent svm,为了更加深入了解svm,自己动手实现一个简单版的. 之所以说是简单版,因为没有用到拉格朗日,对偶,核函数等等.而是用最简单的梯度下降法求解.其中的数学原理我参考了http://blog.csdn.net/lifeitengup/article/details/10951655,文中是用matlab实现的svm. 源代码和数据集下载:https://github.com/linger2012/simpleSvm 其中数据集来自于libsvm,我找了其中