题解 P2841 【A*B Problem】
看上去没有人暴力...
一道
主要思想:二进制枚举
语言:Py3
注意:
于是你就会交这个代码:
n=int(input())
p=1
s='1'
while int(s)%n!=0: #枚举
s=bin(p)
s=s[2:]
p+=1
print(str(int(s)//n),s)
80Pts?!T了两个点???
一点优化:
我们注意到,如果
其次,5的倍数如此,
然后你交了这个代码:
n = int(input())
if n % 2 == 0 or n % 5 == 0: #2或5倍数
p = 2
s = '10'
while int(s) % n != 0:
s = bin(p)
s = s[2:]
p += 2
print(int(s) // n, s)
else:
p = 1
s = '1'
while int(s) % n != 0:
s = bin(p)
s = s[2:]
p += 1
print(int(s) // n, s)
还是80Pts?!
又一点优化:
我耐心地把很多数带进程序,发现
可以发现,全是9时时它的答案全是1!
证明:略(逃
利用这个性质,基本上就可以A掉本题了,我不知道再大一点有没有这个性质(逃,那么根据
100Pts代码:
n = int(input())
a = str(n).count('9')
if a == len(str(n)):
s=''
for i in range(a * 9):
s+='1'
print(int(s)//n,s)
elif n % 2 == 0 or n % 5 == 0:
p = 2
s = '10'
while int(s) % n != 0:
p += 2
s = bin(p)
s = s[2:]
print(int(s) // n, s)
else:
p = 1
s = '1'
while int(s) % n != 0:
p += 1
s = bin(p)
s = s[2:]
print(int(s) // n, s)
这是(暂时)