我最近试图解决一个 HackerEarth 问题。该代码适用于我提供的示例输入和一些自定义输入。但是,当我提交时,它显示超出时间限制的错误。有人可以解释我如何使代码运行得更快吗?
问题陈述:循环移位
一个大的二进制数由大小为 N 的字符串 A 表示,由 0 和 1 组成。您必须对此字符串执行循环移位。循环移位操作定义如下:
如果字符串 A 为 [A0, A1,..., An-1],则在执行一次循环移位后,字符串变为 [A1, A2,..., An-1, A0]。
您执行了无限次移位,并且每次都记录了字符串表示的二进制数的值。执行(可能为 0)操作后形成的最大二进制数是 B。您的任务是确定可以执行的循环移位数,以使字符串 A 表示的值第 K 次等于 B。
输入格式:
第一行:一个整数 T 表示测试用例的数量对于每个测试用例:第一行:两个空格分隔的整数 N 和 K 第二行:A 表示字符串
输出格式:
对于每个测试用例,打印一行,其中包含一个整数,该整数表示执行的循环移位操作的数量,使得字符串 A 表示的值第 K 次等于 B。
代码:
import math
def value(s):
u = len(s)
d = 0
for h in range(u):
d = d + (int(s[u-1-h]) * math.pow(2, h))
return d
t = int(input())
for i in range(t):
x = list(map(int, input().split()))
n = x[0]
k = x[1]
a = input()
v = 0
for j in range(n):
a = a[1:] + a[0]
if value(a) > v:
b = a
v = value(a)
ctr = 0
cou = 0
while ctr < k:
a = a[1:] + a[0]
cou = cou + 1
if a == b:
ctr = ctr + 1
print(cou)