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;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • java中高级工程师面试汇总

    java中高级工程师面试汇总1接口服务数据被劫包如何防止数据恶意提交1.1:防篡改客户端提交请求之前,先对自己请求的参数全部进行拼接加密得到一个加密字符串sign 请求参数加上sign,然后再发送给服务器 服务器将参数获取后也进行相同的拼接加密得到自己的sign 比较与客户端发来的sign是否相同 不相同则是被第三方修改过的,拒绝执行关键:第三方不知道加密方式和请求参数拼接规则,而客户端与服务器是知道的,因此第三方不知道修改参数后如何生成与服务器生成相同的sign 只要请求修改了一点点加密得到的就是不同的签名

  • JAVA留言板_java项目实例源码

    JAVA留言板_java项目实例源码java实现简单留言板功能的代码实例数据库对应的表:guestbook:id,name,phone,email,title,content,time;id新建webproject:guestbookbuildPath:引入连接数据库的驱动的类库在webRoot目录中加入:+faceditor+jsweb.xml代码:xmlns=”http://java….

  • js对象数组添加元素

    js对象数组添加元素varnamevalArr={         "SUBJECT_ID":300,        "SUBJECT_CODE":’PETS’,       }; varname=’SUBJECT_ID’;varval=300;varnamevalArr=newObject();namevalArr.SUBJECT_ID=val;name…

  • setfacl命令基本用法[通俗易懂]

    setfacl命令基本用法[通俗易懂]setfacl命令可以用来细分linux下的文件权限。chmod命令可以把文件权限分为u,g,o三个组,而setfacl可以对每一个文件或目录设置更精确的文件权限。换句话说,setfacl可以更精确的控制权限的分配。比如:让某一个用户对某一个文件具有某种权限。这种独立于传统的u,g,o的rwx权限之外的具体权限设置叫ACL(AccessControlList)ACL可以针

  • 区间dp笔记√

    区间dp笔记√

发表回复

您的电子邮箱地址不会被公开。

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