• POJ 2142 The Balance【扩展欧几里德】


    题意:有两种类型的砝码,每种的砝码质量a和b给你,现在要求称出质量为c的物品,要求a的数量x和b的数量y最小,以及x+y的值最小。

    用扩展欧几里德求ax+by=c,求出ax+by=1的一组通解,求出当x取最小合法正整数解时y的取值,当y小于0时,说明应该放在a的另一边,变为正值。同理当y取最小时,可得到另一组解,比较两组解,取最小即可。

    #include<stdio.h>
    int ex_gcd(int a,int b,int &x,int &y){
        if(!b){
            x=1,y=0;
            return a;
        }
        int ans=ex_gcd(b,a%b,y,x);
        y-=a/b*x;
        return ans; 
    } 
    void cal(int a,int b,int c){
        int x,y,xx,yy;
        int d=ex_gcd(a,b,x,y);
        xx=x,yy=y;
        a/=d,b/=d,c/=d;
        x=((x*c)%b+b)%b;
        y=(c-a*x)/b;
        if(y<0)    y=-y;
        yy=((yy*c)%a+a)%a;
        xx=(c-b*yy)/a;
        if(xx<0) xx=-xx;
        if(x+y>xx+yy)    x=xx,y=yy;
        printf("%d %d
    ",x,y);
    } 
    int main(){
        int a,b,c;
        while(~scanf("%d%d%d",&a,&b,&c)){
            if(!a&&!b&&!c)    break;
            cal(a,b,c);
        } 
        return 0;
    }
  • 相关阅读:
    vim编辑器
    linux常用的命令解释
    克隆虚拟机及本地仓库的搭建
    创建windows系统下的虚拟机
    创建linux系统下的虚拟机
    drf频率组件
    django中过滤 搜索 排序
    drf分页
    js回顾
    数据类型
  • 原文地址:https://www.cnblogs.com/L-King/p/5719664.html
Copyright © 2020-2023  润新知