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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • web前端常见面试题总结

    web前端常见面试题总结人生的路上少不了尝试,人人都是打工人,但愿这份面试题可以帮助到你H5有哪些新特性?绘画canvas(随时随地绘制2D图形)、svg(描述XML中的2D图形)元素语义化标签header、ment、content、footer…新增的input类型和属性音频,视频H5地理定位H5拖放H5WebStorage存储H5应用程序缓存H5中的WebworkersH5服务器发送事件(server-sentevent)允许网页获得来自服务器的更新WebSocket在单个TCP连接上进

    2022年9月15日
    5
  • linux时间戳转换日期格式_shell脚本获取时间戳

    linux时间戳转换日期格式_shell脚本获取时间戳Linux时间戳、日期转换函数:#include#include#include#includeusingnamespacestd;time_tdate_to_timestamp(char*date,char*pfmt){structtmt;strptime(date,pfmt,&t);time_ttt=mktime(&t);returntt;}…

    2022年10月2日
    2
  • 把表单上的数据清除就可以了

    把表单上的数据清除就可以了

    2021年10月20日
    46
  • Python获取图像大小_如何读取0像素图片

    Python获取图像大小_如何读取0像素图片在一张图片中,我们可以获取它的宽和高的像素大小fromPILimportImageimage=Image.open(‘图片的路径’)imagePixmap=Image.size #宽高像素print(imagePixmap)但是在使用百度OCR进行文字识别的时候,文字识别的图片大小不能超过4M,在自动识别文字的时候,就避免不了读取图片的内存大小,如果是大于4M的话,要对图片进行压缩,下面是读取图片内存的代码:importosimagePath=os.path.joi

    2025年10月26日
    4
  • ubuntu16.04重启网络服务命令_ubuntu重启服务器命令

    ubuntu16.04重启网络服务命令_ubuntu重启服务器命令在更改网络配置后,我们需要重启网络服务使更改生效。在centos系统中,我们可以通过以下命令重启网络服务:/etc/init.d/networkrestart#orservicenetworkrestartUbuntu14.04重启网络服务无效:servicenetworkingrestartstop:Jobfailedwhilestoppingstart:Jobi

    2022年10月9日
    4
  • 网页游戏制作_怎么制作app软件

    网页游戏制作_怎么制作app软件对于网页游戏是怎样制作的,你最起码要先学会html超文本标记语言再谈其他的工具方面我喜欢dreamweaver8.0图像及动画方面我喜欢photoshopcs3flash8.0用这三

    2022年8月3日
    9

发表回复

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

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