第六章 数学问题 -------- 6.9 天平称重问题【线性同余方程】青蛙的约会

北大POJ题目---青蛙的约会 今天在北大POJ上做到一道题——青蛙的约会,连续研究了数个小时,提交了共有50多次,每次都是以wrong anwser或是Time Limit Exceeded被打了回来。后来没吃晚饭,当看到最后一次显示“Accepted”时,内心的焦躁瞬间舒展开来了。    题目原文:两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直 阅读详情

模运算:

  取模:计算除以m的余数,叫做对m取模

  同余:将a,b对m取模的结果相同,记为 a ≡ b (mod m)(例如: x % 3 = 2  ===>  x ≡ 2(%3),x余3等于2,和2同余),即 a mod m == b mod m  如果 a ≡ b (mod m),且c ≡ d (mod m),则有 a+b ≡ c+d (mod m)  a*b ≡ c*d (mod m)

线性同余方程: 

    a,b是整数,形如 ax ≡ b (mod n),且x是未知整数的同余式称为一元线性同余方程。
  定理:同余方程 ax ≡ b (mod n) 对于未知数 x 有解,当且仅当 b 是 gcd(a,n)的倍数。否则方程无解。且方程有解时,方程有 gcd(a,n)个解。
  这里根据取余的概念可以得出,假如 a%n = b 的话,可以写出一个等式 a = n*t +b; 
  求解线性同余方程的方法:这里根据上面很容易得出下面两个等式:

    ax = n*y1 + 余数   
    b = n*y2 + 余数

  上面两式相减得 ax - b = n(y1-y2)  ===>  ax - b = ny  ===> ax + ny = b; (这里的未知数x y不用管正负号,因为最后求解出来的结果x y自带正负号。)

  那么根据这个等式采用扩展欧几里得算法就能够得出 x 的值。也就解出了线性同余方程。

例题:青蛙的约会

  思路:因为线总长L,青蛙需要循环跳才有可能碰面。而循环跳的话那么它们的位置只能通过对L取余得到(可以对比钟表转圈理解)。根据题意,假设它们需要跳k次才能碰面,那么很容易得出这个同余组x+k*m ≡ y+k*n (mod L)。而根据上面的讲解我们也可以得到下面两个等式:

    x + k*m = L*t1 + 余数   
    y + k*n = L*t2 + 余数

  还是上面两式相减得到  x - y + (m-n)*k = L * t  ===> (m-n)*k + L * t = y - x  这里已知的变量有 m n L y x,所以未知的变量为 k t

  然后再对比扩展欧几里得算法求线性方程的等式 ax+by = m   所以可以得出 a = m -  n,b = L,m = y - x。

  然后根据上面写代码即可:

import java.util.Scanner;

// 求解同余方程的本质就是求线性方程
// 将求余方程转化为线性方程
public class 青蛙的约会 {
    
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        long x = scanner.nextInt();  // 坐标
        long y = scanner.nextInt();  // 坐标
        long m = scanner.nextInt();  // A第一次跳
        long n = scanner.nextInt();  // B第一次跳
        long l = scanner.nextInt();  // 维度总长
        
        long a = m-n;
        long b = l;
        m = y-x;
        long d = 0;
        try {
            d = ExtGcd.linearEquation(a, b, m);
        } catch (Exception e) {
            System.out.println("Impossible");
        } // 求解线性方程
        long x0 = ExtGcd.x;
        b /= d;  // 约一下
        b = Math.abs(b);  // 有可能小于0
        /*=========这里是AC的关键===========*/
        x0 = (x0%b+b)%b; // 要求大于0的第一个解
        System.out.println(x0);
    }
    
    // 私有的静态的内部类
    private static class ExtGcd{
        static long x,y;
        
        public static long ext_gcd(long a,long b){
            if (b==0) {
                x = 1;
                y = 0;
                return a;
            }
            long res = ext_gcd(b, a%b);
            long x1 = x;
            x = y;
            y = x1-a/b*y;
            return res;
        }
        
        public static long linearEquation(long a,long b,long m) throws Exception{
            long d = ext_gcd(a, b);
            if(m%d!=0) throw new Exception("无解");
            long n = m / d;
            x *= n;
            y *= n;
            return d;
        }
    }
}

  结果:

 

算法笔记:青蛙约会 青蛙约会问题:两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止。可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置。不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到对方的。但是除非这两只青蛙在同一时间跳到同一点上,不然是永远都不可能碰面的。为了帮助这两只乐观的青蛙,你被要求写一个程序来判断这两只青蛙是否能够碰面,会在什么时候碰面。 我们把这两只青蛙分别叫做青蛙A 阅读详情

相关推荐

dify1.3.1应用服务与数据服务分离,附件及插件包迁移至minio,实现离线部署,保证插件正常运行

dify1.3.1应用服务与数据服务分离,附件及插件包迁移至minio,实现离线部署,保证插件正常运行

Time_1023的博客 1873

青蛙的约会(exgcd)

有一个长度为l的圆圈,青蛙A在圆圈上x点,青蛙B在圆圈上y点,A一次跳m米,B一次跳n米,求出跳多少次后两青蛙能碰面,或者他们永远也不能碰面的时候输出不可能。

ChildkiD的博客 353

pyecharts可视化图表-tree:从入门到精通

本文系统介绍了树图(Tree Chart)的可视化技巧,包含基础实现、方向定制和环形布局等实例。树图能清晰展示层次结构数据,适用于组织架构、文件系统等场景。教程详细解析了pyecharts树图的核心配置项,包括数据准备、方向设置(下上、右左)和样式定制,并提供了完整代码示例。通过本指南,读者可快速掌握专业树图的构建方法,实现复杂层次数据的可视化呈现。

大数据内容个人总结与分享 1970

POJ1061青蛙约会问题(扩展欧几里得应用)

问题: 在一个环中,两只青蛙在不同的坐标 x,y,青蛙每次跳跃长度分别为 n,m,在给定环长度L下,两只青蛙是否跳跃相同次数后再同一点(约会成功)。 输入 只包括一行5个整数x,y,m,n,L,其中x≠y < 2000000000,0 < m、n < 2000000000,0 < L < 2100000000。 输出 可以的话输出跳跃的次数,否则输出“Impossib...

qq_43627100的博客 427

RedVQA:轻量级无参考视频质量评估算法原理与工程实践

视频质量评估是计算机视觉领域的关键技术,旨在通过算法自动量化视频的观看体验。其核心原理在于模拟人眼视觉系统,从像素数据中提取并融合空域和时域特征,以预测主观质量分数。这项技术的价值在于,它能自动化处理海量视频内容的质量监控,为流媒体服务、移动设备影像优化等场景提供关键指标。无参考视频质量评估作为该领域的前沿方向,无需原始无损视频作为参考,更贴合实际应用。本文以RedVQA项目为例,深入剖析了如何利用轻量化的深度网络架构,如MobileNetV3,结合高效的时空特征融合模块,在保证评估精度的同时,大幅降低计算

weixin_28698129的博客 576

Ubuntu 22.04下Colmap带CUDA支持的编译安装全攻略(附显卡架构查询指南)

本文详细指导在Ubuntu 22.04系统上从源码编译安装支持CUDA加速的Colmap,解决了官方版本无GPU支持导致处理速度慢的问题。重点包括环境依赖准备、CUDA工具链配置、显卡计算能力查询以及完整的编译安装步骤,旨在帮助研究者和开发者高效部署高性能三维重建工具。

gold8的专栏 345

数学与数字2:天平称重问题

这是一道典型的应用问题, 但内核就在进制问题的处理。题目要求是:用天平称重时,我们希望用尽可能少的砝码组合称出尽可能多的重量。如果有无限个砝码,但它们的重量分别是1,3,8,27,81````等3的指数幂,神奇之处是用它们的组合可以称出任意整数的重量(砝码允许放在左右两个盘中)。本题目要求编程实现:对用户给定的重量,给出砝码的组合方案,重量<1000000. 先看一下这个题是什么意思,例如一个物体的重量是5,那么我们一个盘子放9,一个放1+3,然后将物体放在右侧,就可以得到物体的重量。其他的都能做类

纵横千里 捭阖四方 的专栏 1608

【系列05】端侧AI:构建与部署高效的本地化AI模型 第4章:模型量化(Quantization)

量化的基本思想是减少模型中用于表示参数和激活值的比特数。在模型训练时,参数通常使用32位浮点数(FP32)进行存储,这提供了高精度,但也消耗大量的内存和计算资源。量化则将这些32位浮点数转换成低比特数表示,通常是8位整数(INT8)。量化的原理可以概括为:对浮点数范围进行校准,并将其映射到更小的整数范围内。例如,将一个FP32的权重(如-1.5到1.5)映射到INT8的范围(-128到127)。在推理过程中,模型将使用这些低精度的整数进行计算,从而大大减少了所需的计算量。量化带来的主要收益减少模型大小。

学习,输出==》再学习再输出 1217

扩展欧几里得

poj 1061 青蛙的约会(数论) 2009-09-03 17:27:31 分类: http://acm.pku.edu.cn/JudgeOnline/problem?id=1061 Memory: 224K   Time: 16MS 解题思路 题意:     略    思路:    根据题意,两个青蛙跳到同一个点上

z245527922的专栏 431

ESP32-C3入门教程 基础篇⑩——SNTP(Simple Network Time Protocol) 网络时间同步的简单实例

ESP32-C3入门教程 基础篇⑩——SNTP(Simple Network Time Protocol) 网络时间同步的简单实例

1589

《UDS协议从入门到精通》系列——图解0x83:访问时间参数

详细介绍UDS协议0x83服务,目标ECU的时序参数设置有哪些注意点?

车载系统攻城狮 2138

poj1061青蛙的约会(扩展欧几里得)

题目链接: 啊哈哈,点我点我 这道题是扩展欧几里得问题。。。哎,数学太弱了,看了半天才看懂。。。。 如果要相遇的话,则(n-m)*T+p*c=x-y成立,那么进行代换得到a*x+b*y=c,那么就转换成小白上面讲的了,所以用扩展欧几里得算法求得一组解,那么最后得到解的通式为x=x0+k*b/gcd(a,b),那么直接另右式子等于0及可。。还有就是没有解的情况就是c%gcd(a,b)不等于

大洋深处 1595

如何在非序列模式下使用类似图像模功能

如何在非序列模式下使用类似图像模功能

weixin_72050316的博客 552

问题1068:青蛙约会

青蛙约会 描述 两只青蛙在一个点,但是他们想要来个久别胜新婚的约会,于是他们出发,朝同一个方向绕圈跳,我们求出他们相遇的时间 输入 输入数据的第一行为一个正整数T, 表示测试数据的组数. 然后是T组测试数据. 每组测试数据包含两组正整数,用空格隔开。每组包含两个正整数,表示跳n圈需要的秒数(1/2,表示跳2圈要1秒),用'/'隔开。 输出 对于每组测试数据, 输出它们的下次相遇时间,如果相遇周期是整数则用整数表示,否则用最简分数表示。 输入样例 1 2 1/2 3/4 3...

qq_45748941的博客 314

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

POJ 青蛙的约会 exgcd

不想搞数论啊啊啊QAQ贴学长博客题解 : 【poj1061】青蛙的约会 exgcd解同余方程我的代码:#include <iostream> #include <cstdio> #include <queue> #include <cstring> #include <cmath> using namespace std; typedef long long LL;LL exgcd(LL a, LL

QER 的博客 2324

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

青蛙的约会

青蛙的约会 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 123666 Accepted: 26384 Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止。可是它们出发之前忘记了一件很重...

Become hunger become strong 1574

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

青蛙的约会问题

Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止。可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置。不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到对方的。但是除非这两只青蛙在同一时间跳到同一点上,不然是永...

weixin_30521649的博客 130

青蛙约会

Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止。可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置。不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到对方的。但是除非这两只青蛙在同一时间跳到同一点上,不然是永远都不可能碰面的。...

头秃程序员的日常 1254

poj 1061 青蛙的约会

青蛙的约会 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 66049   Accepted: 10506 Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到

aacbwangke的博客 719

bzoj 1477 青蛙的约会 拓展欧几里得(详细解析)

大水题: 题目戳这里:http://www.lydsy.com/JudgeOnline/problem.php?id=1477 这道题我们分析在一个数轴上有两只青蛙,这个数轴是首尾交接的,所以可以一直围着它走,显然我们可以列出一个方程来。设它们走了t步,和他们追击了k圈,也就是围着又走了k圈。 所以 x + m * t = y + n * t + k * L。 我们转换一下方程: x -

蒟蒻的博客 3465

POJ 1061 青蛙的约会(拓展的欧几里得)

Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止。可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置。不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到对方的。但是除非这两只青蛙在同一时间跳到同一点上,不然是永远都不可能碰面的。

Grit_ICPC的博客 1721

经典的数学问题,“天平称重问题”——java代码实现,原理及解析

蓝桥杯经典的数学问题,“天平称重问题”——java代码实现,原理及解析

Tmoon的博客 1130
上一篇: 第六章 数学问题 -------- 6.7【扩展欧几里得】一步之遥
下一篇: 第六章 数学问题 -------- 6.10 特殊的同余方程—逆元
Estrellas_
博客等级 码龄9年 273粉丝 233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值