作者:和尚与尼姑离婚 | 来源:互联网 | 2023-09-17 15:52
分析核心就是找到v1*vv2k(mod9)那就固定一个v1看看有没有v2k-v1*v实际上vi可以通过滑动窗口看长度为w的余数实际上v也可以通过切片直接获取然后看看固定v1
分析
核心就是找到v1 * v + v2 == k (mod 9)
那就固定一个v1看看有没有v2 = k - v1 * v
实际上vi可以通过滑动窗口看长度为w的余数
实际上v也可以通过切片直接获取
然后看看固定v1,求出v2后,我们用一个dict记录每个余数的idx
如果v1v2都有长度且不同,那么都取第一个;如果相同,就取第一第二个
然后拿到最小的v1,v2
优化点
1.vi可以通过滑动窗口看长度为w的余数涉及大数运算,因为w最大可以到10**5
由于我们是在mod 9的意义下的,所以数字可以转成数位和,用一个前缀和维护即可
2.v也可以通过切片直接获取涉及字符串切片转int,复杂度实际o(r-l+1) -> o(n)
同理,由于是mod 9意义,转成数位和,用前缀和优化成o(1)即可
Ac code
import sys
from collections import defaultdict
from itertools import accumulate
input = sys.stdin.readlinedef solve():s = input().strip()n = len(s)w, m = list(map(int, input().split()))d = defaultdict(list)
总结
对于mod 3和mod 9意义下的大数计算,或者字符串转大数
可以考虑转成数位和进行优化