1 条题解

  • 0
    @ 2025-8-24 21:14:58

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar sLMxf
    史莱姆先锋or死了吗小枫?/总会有... /机房风气蒸蒸日上/小号:crz_qwq&deadX

    搬运于2025-08-24 21:14:57,当前版本为作者最后更新于2023-06-22 22:25:49,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    B3770 Numeric Hack 题解

    hack 代码:

    #include <bits/stdc++.h>
    using namespace std;
    int main() {
    	int n, k, d;
    	cin >> n >> k >> d;
    	++n;
    	if (n % k == d) {
    		cout << n << endl;
    		return 0;
    	}
    	if (n % k < d) {
    		n += (d - n % k);
    	} else {
    		n += (k + d - n % k);
    	}
    	cout << n << endl;
    	return 0;
    }
    

    解决这个问题,我们首先要了解取余:

    aadd 是整数,d0d\ne0 ,那么余数 rr 满足这样的关系:a=qd+ra=qd+rqq 为整数,且 0r<d0 \le |r| < |d|
    ——选自百度

    Q:我怎么说起取余?

    A:题目中有 n104(104)n104|n| \le 10^4 \to (-10^4) \le n \le 10^4,负数的取余有一点奇怪。

    那么对于一个负数,取余可能有两个可能:如 (3)mod7(-3)\bmod71-122 都满足上面的负数取余的条件,(前者称为负余数,后者为正余数)那么可以针对这个地方下手。

    但是不能直接写 hack 数据:

    • 如果 nnkk 同号,是使商尽可能小,只有一个余数(你不会说 7mod3=27\bmod3=-2 )。
    • 如果 nnkk 异号,可能有两个余数。

    所以记得 nnkk 异号,其他没什么好说的。

    • 1

    信息

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