首页 > 其他分享 >可能是一道小学数学题

可能是一道小学数学题

时间:2023-02-02 20:46:22浏览次数:43  
标签:lfloor right int dfrac 一道 小学 数学题 include left

P5179 Fraction

给你 \(a,b,c,d\),求一个最简分数 \(\dfrac pq\) 满足

\[\frac ab<\frac pq<\frac cd \]

若有多组解,输出 \(q\) 最小的,若仍有多个输出 \(p\) 最小的。以p/q格式输出。

首先我们证明一下答案一定满足 \(p\) 和 \(q\) 都最小,也就是不存在 \(\dfrac xy\),使得 \(x>p,y<q\) 或 \(x<p,y>q\)。

若 \(x>p,y<q\),则 \(\dfrac pq<\dfrac py<\dfrac xy\),答案显然应为 \(\dfrac py\)。同理可得另一边。

然后开始分讨。

1.\(\left\lfloor\dfrac ab\right\rfloor+1\le\left\lceil\dfrac cd\right\rceil\)

那答案显然就是 \(p=\left\lfloor\dfrac ab\right\rfloor+1,q=1\)。

  1. \(a=0\)

这时候 \(\dfrac pq<\dfrac cd\),即 \(q>\dfrac{pd}c\)。取 \(p=1,q=\left\lfloor\dfrac dc\right\rfloor+1\)即可。

  1. \(a\ge b\)

这时候可以三个数都减一个 \(\left\lfloor\dfrac ab\right\rfloor\)。

  1. \(a<b,c<d\)

这里有点操作。这时候有 \(\dfrac dc<\dfrac qp<\dfrac ba\)。递归向下。

复杂度是对数级别的(至于对数了个什么玩意我也不知道)。

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#define int long long
using namespace std;
int a,b,c,d,p,q;
int gcd(int a,int b){
    return b?gcd(b,a%b):a;
}
void solve(int a,int b,int c,int d,int &p,int &q){
    int g=gcd(a,b);a/=g;b/=g;
    g=gcd(c,d);c/=g;d/=g;
    int ret=a/b+1,tmp=ceil(1.0*c/d)-1;
    if(ret<=tmp){
        p=ret;q=1;return;
    }
    if(!a){
        p=1;q=d/c+1;return;
    }
    if(a>=b){
        solve(a%b,b,c-a/b*d,d,p,q);
        p+=a/b*q;
        return;
    }
    solve(d,c,b,a,q,p);
}
signed main(){
    while(~scanf("%lld%lld%lld%lld",&a,&b,&c,&d)){
        solve(a,b,c,d,p,q);
        printf("%lld/%lld\n",p,q);
    }
    return 0;
}

标签:lfloor,right,int,dfrac,一道,小学,数学题,include,left
From: https://www.cnblogs.com/gtm1514/p/17087320.html

相关文章

  • Java - 一道关于Arrays.asList的题目
    题目有这样一道有趣的题目:finalint[]test=newint[]{1,2,3,4};finalInteger[]test2=newInteger[]{1,2,3,4};finalListlist1=Arrays.asList(test);finalListl......
  • 每日一道思维题——CF1368C - Even Picture
    题意:给定一整数n,我们给他周围四个格子涂上灰色,要求输出灰色的格子的个数,以及灰色的个数解题思路:我们将n个格子放在一条斜率为1的直线上,他四个方向的格子为灰格子。灰格子......
  • 一道数组去重的算法题把我整不会了
    本文首发:啊这,一道数组去重的算法题把东哥整不会了…读完本文,你不仅学会了算法套路,还可以顺便解决如下题目:316.去除重复字母(中等)1081.不同字符的最小子序列(中等)------......
  • 一道合并有序链表的题
     /** *Definitionforsingly-linkedlist. *structListNode{ *  intval; *  ListNode*next; *  ListNode():val(0),next(nullptr)......
  • 记一道超级愚蠢的leetcode的题
    是513. 找树左下角的值,这道题里面根节点是否是左节点根本就不统一,它在没有左节点的时候是左节点,在右节点有左叶子的时候又不是左节点。     我把我的代码附......
  • 帮留学生做的一道题(存档)
    题目: 您需要实现一个应用程序,在可能的情况下通过缩写单词来缩短消息。(例如,这可能对试图将其推文压缩为140个字符的Twitter用户很有用。)您应该首先实现一个处理缩短消息的......
  • 关于一道MISC的有趣题
    题目只给了一个压缩包flag,是下面这个对吧  然后会发现他有个flag.txt对吧  点开发现是一串及其像base64的东西,我们拿他去解密,会发现很乱,但是有PK!!有PK想到什么?想......
  • python 数学题 百元百鸡 百马百担 实现代码
    #母鸡三元一只,公鸡一元一只,小鸡0.5元一只,一百元全部买鸡,有多少种不同买法,分别是什么?count=0form_jinrange(1,100//3):forg_jinrange(1,100):forx_......
  • 周赛题目证明+at数学题
    题目链接:https://www.acwing.com/problem/content/4795/比赛的时候感觉插入到最后面是最大的,当时只是感觉并没严格证明,y总说比赛的时候可以不用严格证明,赛后要这样做,这样......
  • 一道 “简单” 的 数学题
    数学吧  《一道“简单*的数学题》    https://tieba.baidu.com/p/8209973323   。 这题我还没做,  一起看看  。     @黎合胜  @小......