题目链接:Problem - 1992E - Codeforces
题目大意:给定一个数字串 (一个<=100的数字)(为方便表述s是该数字的字符串,n为该整数)满足 n*a-b == s*a -b(其中s*a,代表将字符串重复拼接a次,然后擦去后b个字符)。问每组数据里的n有多少个a b,并输出。0<=a,b<=10000.
解题思路:为方便表述 以num = s*a-b, 可以看出num是s*a的前缀。然后可以根据 n*a-b 可以计算出num的长度为(0,7),那么便可以暴力枚举num的所有可能,然后通过n*a-b与num相等 有num = n*a-b, b=n*a-num, 判断b的范围 与 通过与当前的a 与 b 得到的长度是否与所枚举的长度 i 是否一致。
def solve() :
s = input()
n = int(s)
num = 0
ans = []
for i in range(0,7):
num = num * 10 + (ord(s[i%len(s)]) - ord('0')) #枚举所有可能
a = num//n
while a<=10000: #枚举a
b = n*a-num
if 0 < b < min(10000, a*n) and len(s) * a - b == i+1: #判断
ans.append((a,b))
a+=1
print(len(ans))
for a,b in ans:
print(a," ", b)
T = int(input())
while T:
solve()
T-=1
欢迎大佬指正,欢迎点赞收藏。
标签:题目,可以,Novice,枚举,num,长度,ord,Mistake From: https://blog.csdn.net/king0304916/article/details/145061106