• [CF547A] Mike and Frog


    [CF547A] Mike and Frog - 数论

    Description

    有两个数 h1,h2,每次变化 h1=(h1*x1+y1)%m;h2=(h2*x2+y2)%m,经过 t 次变化,问你能否使得 h1=a1,h2=a2,如果可以就输出 t,否则输出 -1

    Solution

    求出起始位置和循环节,因为循环节显然是不会超过 m 的,所以我们可以暴力模拟,每次小的那边加,如果做了 2m 次还没有结果,那么就是无解

    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long 
    
    pair<int,int> solve(int m,int h,int a,int x,int y)
    {
        int fir=0,cir=0;
        for(int i=1;i<=2*m;i++) 
        {
            h=(h*x+y)%m;
            if(h==a) 
            {
                if(fir==0) fir=i;
                else if(cir==0) cir=i-fir;
            }
        }
        return {fir,cir};
    }
    
    signed main()
    {
        ios::sync_with_stdio(false);
    
        int m,h1,a1,x1,y1,h2,a2,x2,y2;
        cin>>m>>h1>>a1>>x1>>y1>>h2>>a2>>x2>>y2;
        
        auto pr1=solve(m,h1,a1,x1,y1);
        auto pr2=solve(m,h2,a2,x2,y2);
    
        int f1=pr1.first, f2=pr2.first;
        int c1=pr1.second, c2=pr2.second;
    
        if(f1&&f2)
            for(int i=1;i<=2*m;i++)
            {
                if(f1==f2) 
                {
                    cout<<f1<<endl;
                    return 0;
                }
                if(f1<f2) f1+=c1;
                else f2+=c2;
            }
    
        cout<<-1<<endl;
    }
    
    
    
  • 相关阅读:
    webpack基本使用
    vue-路由-显示名称
    vue-父组件和路由
    vue-路由
    vue-父子组件和ref
    vue-组件
    go-面向对象编程(上)
    JavaScript的历史
    vue-列表动画
    钩子函数实现小球弹落
  • 原文地址:https://www.cnblogs.com/mollnn/p/14381061.html
Copyright © 2020-2023  润新知