如题,写到一半先发出来,不确定有没有时间写完
希望对大家有帮助
import random
rng = random.Random()
def gen_s(n):
return "".join(rng.choice("01") for _ in range(n))
def gen_t(n):
return "".join(rng.choice("01") for _ in range(n))
def gen_t_c(n):
L = ["1" for _ in range(n)]
L[rng.randrange(n)] = "0"
return "".join(L)
# 未写完也未调用,如果要用请自己完善...
def brute_force_solve(s1, s2, t1, t2):
intervals1, intervals2 = get_operable_intervals(t1), get_operable_intervals(t2)
# Describe the contents of each interval by 2-tuple (number of 0's, number of 1's)
q1, q2 = describe(s1, intervals1), describe(s2, intervals2)
# Permute every interval
# Time complexity: (number of intervals)(2**(length of this interval)) (?)
s1 = list(s1)
s2 = list(s2)
intervals = intervals1 + intervals2
for interval in intervals:
...
def describe(s, t):
...
def get_operable_intervals(t):
intervals = [] # Each (a, b) represents $[a,b]$ (i.e. include endpoints)
a = 0
length = len(t)
while a < length:
if t[a] == "0":
intervals.append((a, a))
a += 1
continue
b = a
while b + 1 < length and t[b+1] == "1":
b += 1
intervals.append((a, b))
a = b + 1
return intervals
def loop():
# 这段代码可用于保存RNG种子,后面可用rng.setstate()复现(?需要吗)
#with open("randstate.txt", "x") as f:
with open("randstate.txt", "w") as f:
print(rng.getstate(), file=f)
try:
while True:
# 每次生成指定n的数据,若末尾加'c'则生成符合特殊条件C的数据
s = input("> ")
c = s.endswith("c")
if c: s = s.rstrip(" c")
n = int(s)
print(gen_s(n))
print(gen_s(n))
t_func = gen_t_c if c else gen_t
print(t_func(n))
print(t_func(n))
except KeyboardInterrupt:
pass
if __name__ == "__main__":
loop()
演示:
randstate.txt存储RNG状态,虽然不知道有没有意义> 5
10101
01010
01000
01101
> 10
1011011011
0110110010
0101100011
1100101111
> 10c
1000100001
0100000100
0111111111
1111111110