1 条题解

  • 0
    @ 2025-8-24 23:09:01

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar M1__
    INTJ | cnblogs.com/M136e1

    搬运于2025-08-24 23:09:01,当前版本为作者最后更新于2025-01-29 13:08:33,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    题解:P11637 Mod

    题目传送门

    思路

    一种比较简单的方法。

    根据题意,我们可以发现在若干次操作后 aa 能变成 00 的情况下,操作次数为 pap-a。因为 bb 的操作次数与 aa 相同,所以 bb 的值为 b(pa)b-(p-a)。因为题面中要求 bb 为一个自然数,所以自然就分成了 b(pa)0b-(p-a) \ge 0b(pa)<0b-(p-a) < 0 两种情况。在第二种情况下,如果进行操作,就与题面中的 b0b \ge 0 相悖,所以无需进行任何操作,aabb 本身即为他们的最小值。对应地,在第一种情况下,aa 的最小值即为 00。当经过 pap-a 次操作下后,再每进行 pp 次操作后 aa 会再次等于 00。所以可以求出此时 bb 的最小值。

    综上所述:

    • b(pa)0b-(p-a) \ge 0 时,amin=0a_{min}=0bmin=b(pa)modpb_{min}=b-(p-a)\bmod p
    • b(pa)<0b-(p-a) < 0 时,amin=aa_{min}=abmin=bb_{min}=b

    对于一种情况 b(pa)0b-(p-a) \ge 0 和第二种情况 b(pa)<0b-(p-a) < 0 的样例模拟:

    代码实现

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    ll a,b,p;
    int main(){
    	cin>>a>>b>>p;
    	if((b-(p-a))>0||(b-(p-a))==0) cout<<"0"<<" "<<(b-(p-a))%p;
    	else cout<<a<<" "<<b;
    	return 0;
    }
    
    
    • 1

    信息

    ID
    10900
    时间
    1000ms
    内存
    512MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者