B3770 Numeric Hack题解
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;
}
解决这个问题,我们首先要了解取余:
若 与 是整数, ,那么余数 满足这样的关系: , 为整数,且 。
——选自百度
Q:我怎么说起取余?
A:题目中有 ,负数的取余有一点奇怪。
那么对于一个负数,取余可能有两个可能:如 , 和 都满足上面的负数取余的条件,(前者称为负余数,后者为正余数)那么可以针对这个地方下手。
但是不能直接写 hack 数据:
- 如果 和 同号,是使商尽可能小,只有一个余数(你不会说 )。
- 如果 和 异号,可能有两个余数。
所以记得 和 异号,其他没什么好说的。

浙公网安备 33010602011771号