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


相关推荐

  • golang 激活码2021-激活码分享「建议收藏」

    (golang 激活码2021)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~4D…

    2022年3月30日
  • vscode 配置C语言编译环境(完美版)_C语言环境安装

    vscode 配置C语言编译环境(完美版)_C语言环境安装基本步骤要在VSCode中配置C语言环境,我们首先可能要一个VSCode(废话),所以先下载安装一个VSCode;然后肯定需要相关插件,因为VSCode不能直接拿来写C;然后任何语言的程序在运行前都需要编译,那还需要一个编译器,很可惜VSCode插件里面不自带,所以要自己下载然后配置;最后在VSCode中进行相关配置,就可以下载并安装VSCodevscode下载地址安装相关插件打卡后进入如下界面,选择这个C/C++的,然后点击install进行安装,大概几秒钟就好了,安装完成后in

    2022年9月16日
  • lombok @Accessors用法「建议收藏」

    @Accessors翻译是存取器。通过该注解可以控制getter和setter方法的形式。fluent若为true,则getter和setter方法的方法名都是属性名,且setter方法返回当前对象。@Data@Accessors(fluent=true)classUser{ privateIntegerid; privateStringname; //…

    2022年4月3日
  • 04 能臣之路

    04 能臣之路在上一集我们讲到当时的最有名的人物鉴赏家和品评家许劭,对曹操又一个评价,就说你是治世之能臣,乱世之奸雄。这句话可以有两种解释,一种是处在治世就是能臣,处在乱世就是奸雄;第二种解释,你治理天下就是能臣,扰乱天下就是奸雄。那么曹操到底是做能臣还是做奸雄呢?其实曹操原本是想做能臣的。   公元174年,二十岁的曹操被举为孝廉,担任郎官。孝就是孝子,廉就是廉士,一个人如果被举为孝廉,那么他就有了做官的资

    2022年5月27日
  • 基于OIDC实现单点登录SSO、第三方登录[通俗易懂]

    基于OIDC实现单点登录SSO、第三方登录[通俗易懂]OIDC联合身份认证机制背景概念1OIDC身份认证协议2基于OIDC实现SSO2.1统一登录2.1.1流程2.1.2RP相关接口2.1.3OP相关接口2.2统一登出2.2.1流程2.2.2RP需要在向OP注册时提供2.2.3RP相关接口2.2.4OP相关接口2.3持续监视2.3.1流程2.3.2RP相关接口2.3.3OP相关接口3在OIDC的SSO中集成第三方登录(…

    2022年8月30日
  • 怎么更改wifi频段_【wifi信号频率】wifi频率怎么设置 wifi2.4g和5g哪个更好[通俗易懂]

    怎么更改wifi频段_【wifi信号频率】wifi频率怎么设置 wifi2.4g和5g哪个更好[通俗易懂]wifi频率怎么设置1、打开浏览器,输入192.168.1.1,进入路由设置界面。2、单击左侧的设置向导,然后单击下一步。3、一般情况,选择让路由器自动选择上网方式。4、输入你从运营商那里获得上网账号、密码。5、弹出无线频段选择界面,可按自己的需求进行选择,6、然后设置无线密码即可!wifi2.4g和5g哪个更好2.4gwifi:2.4G信号频率低,在空气或障碍物中传播时衰减较小,传播距离更远。…

    2022年10月20日

发表回复

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

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