zoukankan      html  css  js  c++  java
  • 康熙的难题-模拟爆炸祭

    我以为我能水上几分

    结果被忘删掉freopen的注释而gg

    哭辽

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    康熙的难题(kangxi)题面
    题目描述
    话说西汉时期,汉武帝刘彻派遣张骞出使西域,欲同月氏国结交而共驱匈奴。

    同时,月氏国也欲同大汉结交,也派出使者康破伦出使大汉,可是因为月氏国对于大汉的认知甚少,康破伦同样向西出使大汉。

    一开始,张骞从大汉出发,康破伦从月氏国出发,两人都在同一纬度线上,张骞所处的经度为x,康破伦所处的经度为y;

    接下来,两人同时向西走,而且只能向西走,张骞每天走m 公里,康破伦每天走n 公里,且每天走路的速度不变,也不停下来休息;

    这样两人就在这一条长为L 的纬度线上一直向西走。

    问:过了多少天之后张骞和康破伦会碰面,并磋商两国结交之事(所谓碰面,是指两人处在同一经度上)。

    这下,康熙犯难了,他还是个不大的青年,怎么可能做得出这么难的题目;

    但是,他又是统领全国的帝皇,怎么能在老师面前丢这么大一个面子。

    康熙想:不行!一定得把这个题做出来!(然后就有了下面这段记录)

    第一天,……

    第二天,…………

    第三天,………………

    第四天,……………………

    第五天,…………………………

    第六天,………………………………

    第七天,……………………………………!!!!!!!

    啊!第七天,康熙终于打了7 个感叹号,得出了一个重要的结论!!!!!

    那就是——做不出来。(汗),没办法,他只有请教你,他的挚友,帮他解决这一难题。

    康熙答应你,如果你把这一题做出来了,你将得到御赐赏银一万万两!$$$$$$$$-$$$$$$$$。

    为了改变你生活的现状——衣衫褴褛、闻鼠起舞、蟑螂为伴,你下定了决心——我一定得把这题解决!


    输入
    输入只包括一行5 个整数x,y,m,n,L
    其中0<x≠y < =2000000000,0 < m、n < =2000000000,0 < L <=2100000000。


    输出
    输出碰面所需要的天数,如果永远不可能碰面则输出一行
    "Impossible"。
    样例输入
    1 2 3 4 5
    样例输出
    4

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------

    以前模拟的题

    (看完我就内疚了,当时这是大概看懂了,但原理还不能自己手推出来)

     

    甲走m乙走n相当与一个人走abs|m - n|步;

    于是就可得

    abs|m-n| * a + l * b = |y - x|

    (a,b是要求的变量)

    两边同时除到1

    abs|m-n| * a1 + l * b1 = 1

    而此时的a和b已经不是上一个式子中的a和b了

    而是

    a1=a/|y - x|

    b1=b/|y - x|

    让exgcd返回gcd(abs|m-n|,l)的值

    只是需要特判一下Impossible的情况

    1.  甲乙两个人走的速度相同。

    2.  两个人相差的距离不是求到的exgcd的倍数

    这样输出Impossible就可以了

    如果正常的话

    取一个模

    这个模为 l/gcd(abs|m-n|,l);
    但要注意把余数取成负数的情况

    最终的天数即为a/gcd(abs(m-n),l);

    则为|y-x|/gcd(abs(m-n),l)*a/|y-x

    #include <iostream>
    using namespace std;
    
    long long ex_gcd(long long a, long long b, long long &x, long long &y)
    {
        if (b == 0)
        {
            x = 1;
            y = 0;
            return a;
        }
        long long d = ex_gcd(b, a % b, x, y);
        long long t;
        t = x;
        x = y;
        y = t - (a / b) * x;
        return d;
    }
    
    int main()
    {
        freopen("kangxi.in","r",stdin);
        freopen("kangxi.out","w",stdout);
        long long x0, y0, m, n, l, a, b, c, x, y;;
        cin>>x0>>y0>>m>>n>>l;
        a = m - n;
        b = l;
        c = y0 - x0;
    
        if (a < 0)
        {
            a = -a;
            c = -c;
        }
        long long d = ex_gcd(a, b, x, y);
        if (m == n || c % d != 0) 
            cout<<"Impossible"<<endl;
        else
        {
            b /= d;
            c /= d;
            long long t = c * x;
            cout<<(t % b + b) % b<<endl;
        }
        return 0;
    }
  • 相关阅读:
    [轉]jquery选择器完整介绍
    Jquery表单处理
    javascript中正则表达式中的问号(?) 总结
    Jquery性能问题总结
    MongoDB安装与配置
    MySql 5.x Version Update时用到select时发生的问题
    Sql總結
    Jquery总结
    Update + Select
    AutoCAD C#二次开发
  • 原文地址:https://www.cnblogs.com/darlingroot/p/10587466.html
Copyright © 2011-2022 走看看