2 条题解

  • 3
    @ 2022-11-9 19:51:40

    解题思路

    我们是直接枚举答案。假设有b+xa+d+yc=tb + x \cdot a + d + y \cdot c = t,那么tt一定满足tb,tdt \geq b, t \geq d,同时还要满足atb,ctda \mid t - b, c \mid t - d

    我们的tt一开始的取值就要比bbdd都要大。

    然后,我们要满足atba \mid t - b,我们只用关心tbt - b除以aa的余数是多少,可以发现tbkat - b - k \cdot a除以aa的余数没有改变,不会影响余数。同理tdkct - d - k \cdot c也不会影响余数。因此,我们从将tbt - btdt - d同时减去aacc的最小公倍数,也不会改变余数tbklcm(a,c)t - b - k \cdot lcm \left( {a, c} \right)tdklcm(a,c)t - d - k \cdot lcm \left( {a, c} \right),因此我们只需要考虑tbt - btdt - dlcm(a,c)lcm \left( {a, c} \right)以内的数就可以了。因为如果大于lcm(a,c)lcm \left( {a, c} \right)的话,那么我们就减去lcm(a,c)lcm \left( {a, c} \right),并不会影响余数。因为aacc的值在100100以内,所以最小公倍数在1000010000以内。又因为bbdd最大是100100,因此tt枚举到1010010100就可以了。

    AC代码如下:

    还可以用扩展欧几里得。由b+ax=d+cyb + a \cdot x = d + c \cdot y,得到axcy=dba \cdot x - c \cdot y = d - b。如果gcd(a,c)dbgcd \left( {a, c} \right) \mid d - b,才有解。先让xx取到最小正整数,然后通过式子求得yy,当y<0y < 0,那么xxyy同时加上对应的值。

    AC代码如下:

    
    
    • 1
      @ 2022-11-9 21:47:44
      col1 col2 col3
      变换:px-qy=b-a
      令-y=h
      px1+qy1=b-a 对应整数对(x1,y1)
      由扩展欧几里得,得
      px2+qy2=gcd(p,q) 对应整数对(x2,y2)
      且 x1,y1为整数
      所以 如果 b-a=k*gcd(p,q) 保证可以有解
      这是充分不必要的
      那么怎么证明必要性呢
      我们知道如果这个方程成立 还有一种情况即 gcd(p,q)*k+dx*p-dy*q
      但是我们在求解gcd(p,q)的时候,如果采用二进制会在递推中产生迭代
      return gcd(a-b,b)
      那么只有迭代次数足够多
      我们总是有 gcd(a,b)->gcd(a-b,b)->gcd(dx*a-dy *b,b) (这里可以说是应用了一下更相减损)
      于是我们所求得的,一定是最优解,必要性得到证明
      证毕
      • 1

      信息

      ID
      1625
      时间
      1000ms
      内存
      256MiB
      难度
      9
      标签
      递交数
      143
      已通过
      13
      上传者