题目描述:
输入两个字符串s1, s2, 只能对s1进行一种操作,即可以将字符串中任意一个位置的字符移动到末尾0(1), 为s1转变为s2最少需要多少步。
如 s1= acdk
s2 = dack
s1=acdk -> cdka -> dkac -> dack 总共3次
import sys
from collections import Counter
def main(sour, tar):
if len(sour)!=len(tar):
return -1
if Counter(sour) != Counter(tar):
return -1
n = len(tar)
count = 0
j = 0
for i in range(n):
if sour[i] == tar[j]:
count += 1
j += 1
return n - count
if __name__ == "__main__":
s1 = sys.stdin.readline().strip()
s2 = sys.stdin.readline().strip()
res = main(s1, s2)
print(res)
输入:
第一行为 n个数,
第二行依次每个数的左区间
第二行依次每个数的右区间
如
2
1, 2
3, 3
说明, 总共有两个数, 其区间为[1,3]和[2,3]
求n个数中最小值的期望数。
比如上述输入:
1出现的情况,(1,2), (1,3) 概率为2/6
2出现的情况,(2,2), (2,3), (3,2) 概率为3/6
3出现的情况,(3,3) 概率为1/6
所以期望值 = 1*2/6 + 2*3/6 + 3*1/6
import sys
from collections import Counter
def main(n, res):
l = res[0]
r = res[1]
prob = [0.0 for _ in range(2001)]
prob[1] = 1
for i in range(2, 2001):
sum = 1
for j in range(n):
if i < l[j]:
continue
elif i > r[j]:
sum = 0
break
else:
sum *= (r[j] - i +1)/ (r[j] - l[j]+1)
prob[i] = sum
res = 0.0
for i in range(1, 2000):
res += i * (prob[i] - prob[i+1])
return res
if __name__ == "__main__":
n = int(sys.stdin.readline().strip())
res = []
for i in range(n):
tmp = sys.stdin.readline().strip()
tmp = [int(x) for x in tmp.split()]
res.append(tmp)
res = main(n, res)
print(res)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)