uva 10548 – Find the Right Changes(拓展欧几里得)

uva 10548 – Find the Right Changes(拓展欧几里得)

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

题目链接:uva 10548 – Find the Right Changes

题目大意:给定A,B,C,求x,y,使得xA+yB=C,求有多少种解。

解题思路:拓展欧几里得,保证x,y均大于等于0,确定通解中t的取值。

#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>

using namespace std;
typedef long long ll;
const ll INF = 0x3f3f3f3f3f3f3f;

ll A, B, C;

void gcd (ll a, ll b, ll& d, ll& x, ll& y) {
    if (b == 0) {
        d = a;
        x = 1;
        y = 0;
    } else {
        gcd(b, a%b, d, y, x);
        y -= (a/b) * x;
    }
}

void solve () {
    ll d, x, y;
    gcd(A, B, d, x, y);

    if (C % d) {
        printf("Impossible\n");
        return;
    }

    ll up = INF, lower = -INF;

    if (B / d > 0)
        lower = max(lower, (ll)ceil( (-1.0*x*C) / B) );
    else
        up = min(up, (ll)floor( (-1.0*x*C) / B) );

    if (A / d > 0)
        up = min(up, (ll)floor( (1.0*y*C) / A));
    else
        lower = max(lower, (ll)ceil( (1.0*y*C) / A));

    if (up == INF || lower == -INF)
        printf("Infinitely many solutions\n");
    else if (up < lower)
        printf("Impossible\n");
    else
        printf("%lld\n", up - lower + 1);
}

int main () {
    int cas;
    scanf("%d", &cas);
    while (cas--) {
        scanf("%lld%lld%lld", &A, &B, &C);
        solve();
    }
    return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118523.html原文链接:https://javaforall.net

(0)
上一篇 2021年12月4日 下午10:00
下一篇 2021年12月4日 下午11:00


相关推荐

  • 【fiddler】用fiddler实现android手机抓包

    【fiddler】用fiddler实现android手机抓包一 fiddler 的简介 fiddler 是位于客户端和服务器端之间的代理 也是目前最常用的抓包工具之一 它能够记录客户端和服务器之间的所有请求 可以针对特定的请求 分析请求数据 设置断点 调试 web 应用 修改请求的数据 甚至可以修改服务器返回的数据 功能非常强大 是 web 调试的利器 注意 Fiddler 是以代理 web 服务器的形式工作的 它使用默认代理地址 127 0 0 1 端口 8888 也就是说默认监听在安装本机的 127 0 0 1 8888 如果需要抓局域网内其他机器的包

    2026年3月19日
    2
  • vue上传图片组件编写

    vue上传图片组件编写点击打开源码编写一个vue上传图片组件:1.首先得有一个[type=file]文件标签并且隐藏,changge事件来获取图片:2.触发隐藏的文件标签:(通过原生的click来触发)document.getElementById(‘upload_file’).click()3.获取file文件里面的值方法:fileChange($event)fileCha

    2022年6月24日
    27
  • Maven安装配置及在idea中配置

    Maven安装配置及在idea中配置目录一、Maven是什么二、Maven安装及配置1.Maven本地安装2.Maven环境变量的配置3.Maven配置repository三、idea中创建mevenwebapp及配置1.配置settings2.创建mevenwebapp一、Maven是什么1.Maven是Apache下的一个纯java开发的开源项目,它是一个项目管理…

    2022年5月28日
    61
  • 国产算力新突破,刘庆峰揭科大讯飞AI大模型跨越之路

    国产算力新突破,刘庆峰揭科大讯飞AI大模型跨越之路

    2026年3月14日
    3
  • LLDP协议[通俗易懂]

    LLDP协议[通俗易懂]一、LLDP协议概述随着网络技术的发展,接入网络的设备的种类越来越多,配置越来越复杂,来自不同设备厂商的设备也往往会增加自己特有的功能,这就导致在一个网络中往往会有很多具有不同特性的、来自不同厂商的设备,为了方便对这样的网络进行管理,就需要使得不同厂商的设备能够在网络中相互发现并交互各自的系统及配置信息。LLDP(LinkLayerDiscoveryProtocol,链路层发现协议)就是用于这个目的的协议。LLDP定义在802.1ab中,它是一个二层协议,它提供了一种标准的链路层发现方式。LLDP

    2022年5月5日
    276
  • 解决 bcm43问题

    解决 bcm43问题

    2021年5月3日
    163

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号