poj 2142 The Balance 扩展欧几里得

poj2142 The Balance(扩展欧几里得算法) The Balance Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 6423   Accepted: 2832 Description Ms. Iyo Kiffa-Australis has a balance and only two kinds of wei 阅读详情

http://poj.org/problem?id=2142


题意:给你两种砝码,重量分别是a和b,每种砝码都有无数个,问你要用这两种砝码和天平称出重量为c的物品,两种砝码各要使用多少个,如果有多种情况,输出和须要砝码数最小的那种情况,如果还有多种情况,输出需要的砝码总重量最小的那种情况。


思路:我们可以根据题意列出一个方程,假如需要x个第一种砝码,y个第二中砝码,那么a*x+b*y=c或者a*x+b*y=-c;这样就是一个经典的扩展欧几里得算法问题了,我们先求出a和b的最小公约数gcd,这就是使用两种砝码能称出的最小的重量了,并且此时欧几里得算法也求出了此时的x和y了,那么看c是gcd的多少倍,那么就把x和y乘上这个倍数,就是一种答案了,可是怎么求x+y最小的那种情况呢?根据贪心的思想,肯定是质量大的砝码数量越多,质量小的砝码数量越少的时候,x+y最小。

假设质量a小于b,这时候我们想,当质量为a的砝码的数量大于b/gcd的时候,可以把b/gcd个质量为a的砝码换成a/gcd个质量为b的砝码,这样可以得到一个更优解,所以我们得出结论,最后的答案,x一定在0到b/gcd-1之间,只要对b/gcd取模就好了,再根据得出的x求y,就很简单了,因为有两个方程,所以会求出两组解,最后比较一下哪组更优,那组就是答案。

还有一个需要注意的是,但输入时100 100 100 这样的时候,我们知道,1 0和0 1这样的都是可以的,可是输出0 1是错的,输出1 0就对了,题目没有说明呀,太坑了。。。所以特殊判断了一下,然后就过了。。。。。。。。。


#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
using namespace std;

int exgcd(int a,int b,int &x,int &y){
    if(b==0){
        x=1;
        y=0;
        return a;
    }
    int r=exgcd(b,a%b,x,y);
    int tem=x;
    x=y;
    y=tem-a/b*y;
    return r;
}

int main()
{
    int a,b,d;

    while(cin>>a>>b>>d){
        if(!a&&!b&&!d)
            break;
        bool flag=1;
        int x1=0,y1=0;
        int x2=0,y2=0;
        int x,y;
        if(a>=b){
            flag=0;
            int tem=a;
            a=b;
            b=tem;
        }

        int dd=exgcd(a,b,x,y),bb;

        x1=x;y1=y;
        x1*=d/dd;
        bb=b/dd;
        x1=(x1%bb+bb)%bb;
        y1=fabs((d-x1*a)/b);

        x2=x;y2=y;
        d=-d;
        x2*=d/dd;
        bb=b/dd;
        x2=(x2%bb+bb)%bb;
        y2=fabs((d-x2*a)/b);

        //cout<<x1<<' '<<y1<<endl;
        //cout<<x2<<' '<<y2<<endl;

        if(x1+y1<=x2+y2){
            x=x1;y=y1;
        }
        else{
            x=x2;y=y2;
        }

        if(a==b) cout<<max(x,y)<<' '<<min(x,y)<<endl;
        else if(flag)
            cout<<x<<' '<<y<<endl;
        else cout<<y<<' '<<x<<endl;
    }
    return 0;
}


旋转矩阵推导 推导前提: 坐标使用右手坐标系,角度逆时针旋转为正。 绕X轴旋转角度为 俯仰角 即Pitch 绕Y轴旋转角度为 偏航角 即Yaw(Head) 绕Z轴旋转角度为 翻滚角 即Roll 一、平面二维坐标点的旋转 如右图所示,根据三角函数关系,可以列出向量OP与OP’的坐标表示形式: x = |OP|•cosα x′ = |OP|•cos(α+β) y = |OP|•sinα y′ = |OP|•sin(α+β) 将P′(x′,y′)表达式展开: x′ = 阅读详情

相关推荐

保姆级教程:用U盘给浪潮服务器装系统(含RAID驱动加载技巧)

本文提供了一份详细的浪潮服务器U盘安装系统指南,重点介绍了RAID驱动加载技巧与实战步骤。从准备工作到系统安装全流程,涵盖RAID配置、驱动加载方法及常见问题排查,帮助用户高效完成服务器系统部署。特别强调RAID驱动与服务器型号的匹配性,确保安装过程顺利。

uuu88的博客 735

[扩展欧几里得] POJ2142The Balance

题目 有两种砝码a,b,要用ab称出c的质量,计算ab的最少个数 题目链接:http://poj.org/problem?id=2142 思路 还没学LaTeX 代码 #include<cstdio> #include<cstring> #include<cmath> #include<cstdlib> #include<cctype> #include<ctime> #include<iostream> #includ

kosf_的博客 899

samba源码编译安装(版本4.13.0)

这里写目录标题前言编译安装samba下载三个包安装依赖共需要安装samba、gnutls、nettle1、进入解压后的samba目录执行:2、进入解压后的gnutls目录执行3、进入解压后的nettle目录执行3.1 卸载已存在nettle3.2 编译3.3 make3.4 安装4、进入gnutls继续编译4.1 编译4.2 make4.3 安装5、再次进入解压后的samba目录5.1 执行./configure5.2 make5.3 samba安装启动samba 前言 一般来说,安装samba最快的方式应

灵葱的博客 1万+

POJ 2142 The Balance 扩展欧几里得

题意:有两种类型的砝码,每种的砝码质量a和b给你,现在要求称出质量为d的物品,要求a的数量x和b的数量y最小,以及x+y的值最小。 思路:是扩展欧几里得的应用。设ax + by = 1,求出x和y的值,因为我们要求ax + by = n的解,所以需要将x y的值乘以n。因为题目中要求x和y的值都要为正,然而,易知,ax + by = 1在a和b都为正数的情况下,x 和 y必有一个数是负的。因

3096

【电力电子控制】基于强化学习的单相逆变器并网电流控制

本文将尝试以 DQN(Deep Q-Network)为例,设计并训练一个面向单相逆变器的智能控制器,实现对并网电流的精准调节。

weixin_62596197的博客 463

Unity中URP实现水体效果(泡沫)

在上篇文章中,我们实现了水体的深度。在这篇文章中,我们来使用上篇文章采样后的深度图来实现水中的泡沫效果。

楠溪泽岸的博客 3489

[POJ2142]The Balance 扩展欧几里得

DescriptionMs. Iyo Kiffa-Australis has a balance and only two kinds of weights to measure a dose of medicine. For example, to measure 200mg of aspirin using 300mg weights and 700mg weights, she can pu...

LvYanchang的博客 385

Matlab2021a破解版安装与激活实战教程(含详细步骤截图)

本文详细介绍了MATLAB R2021a的正版安装流程与核心功能优化,包括系统要求、安装步骤、性能调优及深度学习工具箱的应用。通过实战教程和代码示例,帮助用户高效搭建开发环境并掌握关键技术,特别适合工程计算与科学研究的专业人士。

vvv99的博客 460

poj 2142 The Balance 扩展欧几里得

POJ2142 题目的大意是通过放不同的砝码使得天枰平衡 很容易得到实际上问题就是解ax=d+byax=d+by与ax+d=byax+d=by这两个方程的满足条件的最小的正整数解 但实际上我们可以通过解这样一个不定方程ax+by=dax+by=d来得到结果 首先,x,yx,y的正负是无关紧要的(如果其中一个是负数,我们直接取绝对值就可以),无非就是砝码从一段移到另一端。 其次,通过扩展

风城 462

Habitat安装全网最详细教程,手把手带你跑通example.py(全网唯一)

全网最详细具身智能仿真平台habitat的安装教程

shannanshouyin的博客 2756

Unitree G1仿人机器人协同搬箱:从仿真搭建到多机协同部署完整指南

Unitree G1仿人机器人协同搬箱技术方案摘要 本文提供了一套完整的Unitree G1人形机器人协同搬箱解决方案,涵盖从仿真环境搭建到多机协同部署的全流程。核心内容包括: 双仿真环境配置:同时搭建Gazebo+ROS Noetic基础仿真环境与Isaac Gym+Mujoco高性能RL训练环境,支持Sim2Sim迁移验证 训练框架搭建:详细配置unitree_rl_gym框架,提供PPO算法定制化训练流程和参数优化方案 数据集应用:整合宇树开源真机数据集(UnifoLM-WBT-Dataset)~~~

huanghm88的专栏 471

POJ2142_The Balance_扩展欧几里得

The Balance Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 6456   Accepted: 2840 Description Ms. Iyo Kiffa-Australis has a balance and only two kinds of w

弱的奋斗之旅 952

(持续更新中!)详解【计算机类&面试真题】军队文职考试 ——第二期(真题+解析)| 网络协议的三个核心要素;交互式系统中的非剥夺策略;中断和陷入的区别;可变分区管理中的硬件机制;数据库系统的优点

本篇博客将讨论军队文职面试(计算机类)的几个关键问题。我们将介绍网络协议的核心要素(帮助你理解网络通信的基本原理)、交互式系统中的非剥夺策略(解释为何这是一个优秀的策略以及其对用户体验、系统稳定性和可预测性的影响)、中断和陷入的区别(从引起原因、处理机制、权限级别和应用等方面进行阐述)、可变分区管理的硬件机制以及数据库系统与文件系统的优点比较。通过阅读本文,您将深入了解这些话题,为面试准备和实际应用提供有价值的知识。

追光者♂:记录、分享、总结、提升,现象级专栏《Python从入门到人工智能》作者,无惧黑暗,坚信曙光 1707

【扩展欧几里得】POJ 2142 The Balance

[size=medium]KIDx 的解题报告 题目链接:[url]http://poj.org/problem?id=2142[/url] 不懂扩展欧几里得请先参照这里: [url]http://972169909-qq-com.iteye.com/blog/1140914[/url] 题意:输入3个数,前2个是砝码的种类,问各要多少个才能称出第三个数出来【同时要使2个答案之和最小】...

基德KID.1412 169

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

POJ2142 The Balance(扩展欧几里得算法)

The Balance Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 6473   Accepted: 2849 Description Ms. Iyo Kiffa-Australis has a balance and only two kinds of wei

Smile 732

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

POJ-2142-The Balance(扩展欧几里得)

A B C D E F G H B - The Balance Crawling in process... Crawling failed Time Limit:5000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Description

不会吃鱼的喵 676

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

The Balance POJ - 2142 (扩展欧几里得定理)

问题虫洞:The Balance POJ - 2142 黑洞内窥: 多组输入,每组输入A、B、C三个数字; 表示 Ax = By + C 或者 Ax = By + C, 求最小的min(x+y); 思维光年: 变型一下上面的两个式子: Ax - By = C Ax - By = C 问题改为:求着两组解的一个最小正整数解x,求此时的(x+y)的最小值; ACco...

浦柳人的博客 268

The Balance POJ 2142 扩展欧几里得

Description Ms. Iyo Kiffa-Australis has a balance and only two kinds of weights to measure a dose of medicine. For example, to measure 200mg of aspirin using 300mg weights and 700mg weights, she...

aocan6909的博客 161

POJ - 2142 The Balance(扩展欧几里得)

题目链接:点击查看 题目大意:给出两种重量的砝码,我们需要利用天平称出指定重量的药物,我们需要求出这两种砝码各自的数量,使得砝码数量之和最小 题目分析:我们可以先列出关系式,假设两个砝码的重量分别为a和b,我们需要秤的药物重量为c,那么我们可以得出关系式a*x+b*y=c,用扩展欧几里得可以算出x和y,然后我们分两种情况讨论: 求x是作为解的最小正整数,即需要x个重量为a的砝码放在天平左边,...

Falcon的博客 415

poj 2142 The Balance (扩展欧几里得算法)

The Balance Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 3113 Accepted: 1370 链接:http://poj.org/problem?id=2142 Description Ms. Iyo Kiffa-Austral...

dengyun9338的博客 184

poj 2142 The Balance(扩展欧几里得)

题意:给出两种质量的砝码,和一份药品,问要多少砝码能称出物品,砝码的个数满足两种砝码的数量和尽量小,如果还有多解满足两种砝码的总质量最少。 思路:比较简单的扩展欧几里得。很容易列出方程ax+by=d,扩展欧几里得直接求解~但是此时求出的只是一组可行解,我们要对其进行调整,我们知道若x和y是方程的解,那么x+kb,y-ka也是方程的解,k是整数。根据这个去调整解,获得一个最优的就行了。

绝望的乐园 750

POJ2142The Balance扩展欧几里得

题目:http://poj.org/problem?id=2142   题意:有两种类型的砝码质量分别为和,要求称出质量为的物品,要求的数量和的数量的和      最小,如果有多个最小值,取最小的。   分析:扩展欧几里得求出特解后,把转化为最小正值,即,,若      求出的为负值,则把变正,意思就是砝码放置的位置有左右之分,可以左面的减去右面的,也可以右面

Rain 436

POJ-2142 The Balance(扩展欧几里得)

题意 给你一台无刻度的天平和两种质量为 A,BA,BA,B 的砝码,使用 xxx 个 AAA 砝码, yyy 个 BBB 砝码,称出质量为 CCC 的物品(砝码可以放在天平的任意一侧)。求当 x+yx+yx+y 值最小时 Ax+ByAx+ByAx+By 最小的 x,yx,yx,y 值。 0&amp;lt;A,B≤100000&amp;lt;A,B≤1000000&amp;lt;C≤500000&amp;lt;C≤500000...

Paulliant的博客 448

POJ2142The Balance 扩展欧几里得求解最小砝码数量

Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 8764   Accepted: 3806 Description Ms. Iyo Kiffa-Australis has a balance and only two kinds of weights to measure a dose of...

红点雷龙XL 414

POJ 2142 The Balance(扩展欧几里得, 函数单调)

扩展欧几里得 题目意思: 给出重量为a和b的砝码,数量无限。要求用天平称出 重量c。 a, b, c都是整数, a != b. 也就是求方程 a * x + b * y = c 的整数解。要求 |x| + |y| 值最小。如果 |x| + |y| 值相同,那么 |a * x| + |b * y| 值最小。 本题要点: 1、扩展欧几里得: 求出 x0 和 y0 是方程 a * x + b * y = c一组解, 那么方程的通解是 x = x0 + b1 * k, y = y0 - a1 * k, 其中,a1

qq_38232157的博客 197

poj 2142 The Balance 数论-扩展欧几里得

扩展欧几里得算法应用 #include using namespace std; int x,y,d; int exgcd(int a,int b,int &x,int &y) { if(b == 0) { x = 1; y = 0; return a; } int d = exgcd(b,a%b,y,x);

zhoutonglx的专栏 432
上一篇: poj 1692 Crossed Matchings DP
下一篇: poj 2689 Prime Distance
ACMer_浩
博客等级 码龄12年 0粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值