专栏文章
ABC387E Another Solution With Brute Force
题解参与者 7已保存评论 10
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 10 条
- 当前快照
- 1 份
- 快照标识符
- @miql5uz5
- 此快照首次捕获于
- 2025/12/04 06:35 3 个月前
- 此快照最后确认于
- 2025/12/04 06:35 3 个月前
猜测:当解的很多位不为 时,数位和也会非常大,那么出现合法的情况概率也会非常低。
所以我们需要让解存在尽量多的 。
对于 ,我们直接暴力判断。
对于 ,我们分类讨论:
- 我们将 乘以 ,将这个数的最高位保留,其余数设为 ,将这个数设为 ,然后从 开始暴力做;
- 如果上面没有跑出解,说明上述 非常接近上界 ,那么 一定是由除最高位以外许多位为 的数组成。我们直接从 开始做。
数量级和正确性证明可以通过官方题解来理解。
@_determination_:这样不会 TLE 吗?Re:请参考官方题解,发现解都是由前面一些数,中间一堆 ,最后面一些数组成的,而我们从一个除了第一位都是 的数开始跑肯定是能够跑出解的,而且如果达到了上界,说明 本身就有非常多的 ,所以从 开始跑,时间复杂度的正确性是能够保证的。这种做法只是说如果你懒得推那么多情况,就可以用。
PYTHON@__xzm__:为啥提交会 TLERe:请使用 PyPy 提交,众所周知,CPython 很慢。
import sys
sys.set_int_max_str_digits(0)
def digit_sum(n):
return sum(int(i) for i in str(n))
n = int(input())
up = n * 2
if n <= 1000:
a, b = n, n + 1
while b <= up:
if a % digit_sum(a) == 0 and b % digit_sum(b) == 0:
print(a)
sys.exit(0)
a += 1
b += 1
print("-1")
m = n * 2
m = int(str(m)[0] + (len(str(m)) - 1) * "0")
a, b = m, m + 1
while b <= up:
if a % digit_sum(a) == 0 and b % digit_sum(b) == 0:
print(a)
sys.exit(0)
a += 1
b += 1
a, b = n, n + 1
while b <= up:
if a % digit_sum(a) == 0 and b % digit_sum(b) == 0:
print(a)
sys.exit(0)
a += 1
b += 1
相关推荐
评论
共 10 条评论,欢迎与作者交流。
正在加载评论...