zoukankan      html  css  js  c++  java
  • 1299. 五指山

    圆圈的长为 (n),逆时针记为:(0,1,2,…,n−1),而大圣每次飞的距离为 (d)

    大圣所在的位置记为 (x),而大圣想去的地方在 (y),且筋斗云只沿着逆时针方向翻,告诉大圣至少要飞多少次才能到达目的地。

    思路

    假设飞(m)次到达目的地。

    则满足:((x+m*d) mod n = y),即(x+m*d = y+n*k)

    于是(-n*k+m*d = y - x),用扩展欧几里得求解出最小的(m),思路同[NOIP2012 提高组] 同余方程

    int n,dis,st,ed;
    
    int exgcd(int a,int b,int &x,int &y)
    {
        if(!b)
        {
            x=1,y=0;
            return a;
        }
    
        int d=exgcd(b,a%b,x,y);
        int t=x;
        x=y;
        y=t-a/b*y;
        return d;
    }
    
    int main()
    {
        int T;
        cin>>T;
        while(T--)
        {
            cin>>n>>dis>>st>>ed;
    
            int x,y;
            int d=exgcd(n,dis,x,y);
    
            if((ed-st) % d) puts("Impossible");
            else
            {
                LL res=(LL)y*(ed-st)/d;
                cout<<(res%(n/d)+n/d)%(n/d)<<endl;
            }
        }
        //system("pause");
        return 0;
    }
    
  • 相关阅读:
    InitializingBean
    线程池
    maven
    mysql主从库
    zookeeper
    分布式服务框架 Zookeeper -- 管理分布式环境中的数据
    远程调试
    enum
    注解
    Shell错误[: missing `]'
  • 原文地址:https://www.cnblogs.com/fxh0707/p/14614361.html
Copyright © 2011-2022 走看看