zoukankan      html  css  js  c++  java
  • 双六问题

    双六问题

    题目:一个双六上面有向前向后无限延续的格子,每个格子都写

    有整数。其中0号格子是起点,1 号格子是终点。而骰子上只有a,b,-a,-b四个整数,

    所以根据a和b的值的不同,有可能无法到达终点。现在的问题是掷出a,b,-a,-b各

    多少次可以达到终点呢?


             

    输入:一行,包含两个数 a 和 b,两数之间用一个空格分隔,含义如题目所述。

    输出:一个数,表示掷出四个整数次数的和,如果解不唯一,就输出和最小的值,

    如果无解则输出 0 。

    输入示例:4 11

    输出示例:4

    数据范围:1<=a,b<=10^9

    题解:这个问题其实就是一道裸的扩展欧几里得算法,翻译过来就是求整数x、y使得ax+by=1

    #include<iostream>
    using namespace std;
    typedef long long LL;
    
    LL extgcd(LL a,LL b,LL &x,LL &y)
    {
        if(a==0){
            x=0;y=1;
            return b;
        }
        else{
            LL tx,ty;
            LL d=extgcd(b%a,a,tx,ty);
            x=ty-(b/a)*tx;
            y=tx;
            return d;
        }
    }
    
    int main()
    {
        LL a,b,x,y;
        scanf("%lld%lld",&a,&b);
        if(extgcd(a,b,x,y)!=1){printf("0
    ");return 0;}
        printf("%lld
    ",abs(x)+abs(y));
    return 0;
    }
  • 相关阅读:
    Python一键安装缺失库
    Python画樱花树❀
    Python时间模块time
    Python的画五角星
    力扣225.用队列实现栈
    STL是个啥?
    如何使用递归遍历对象获得value值
    JS操作未跨域iframe里的DOM
    CSS3D效果
    前端轮播小结
  • 原文地址:https://www.cnblogs.com/543Studio/p/5157594.html
Copyright © 2011-2022 走看看