111
'''#111,输入一个字符串,输出他的最长回文子串,要求仅有单重循环完成(manacher 算法)
'''
s=input("请输入字符串:")
s='#'+'#'.join(s)+'#'
radis = [0] * len(s) #初始化回文半径
maxlen, pos, max_right = 0, 0, 0
for i in range(len(s)):
if i<max_right :
radis[i]=min(max_right - i, radis[pos * 2 - i])#
else:
radis[i]=1
while i - radis[i] >= 0 and i + radis[i] < len(s) and s[i - radis[i]] == s [i + radis[i]]:#左右不超且满足对称相等
radis[i] += 1
if i - 1 + radis[i] > max_right:#如果满足扩大半径的条件
max_right = i - 1 + radis[i]#更新最右侧的位置
pos = i#更新指针中心位置
maxlen=max(maxlen,radis[i])
print (maxlen-1)
135
'''135,递归求最大公约数
输入两个整数a和b,请你编写一个函数,gcd(a, b), 计算并输出a和b的最大公约数。
输入
共一行,包含两个整数a和b。
输出
共一行,包含一个整数,表示a和b的最大公约数。
样例输入
12 16
样例输出
4
'''
def gcd(a,b):
if a%b==0:
return b
else: return gcd(b,a%b)
a,b=map(int,input("请输入a,b(a>b):").split())
print (gcd(a,b))
#136
'''136,跳台阶
一个楼梯共有n级台阶,每次可以走一级或者两级,问从第0级台阶走到第n级台阶一共有多少种方案。
输入
共一行,包含一个整数n。
输出
共一行,包含一个整数,表示方案数。
样例输入
5
样例输出
8
'''
def t(n):
if n==1:
return 1
elif n==2:
return 2
elif n>2:
return t(n-1)+t(n-2)
n=int(input("请输入n:"))
print(t(n))
#137
'''137,走方格
给定一个n*m的方格阵,沿着方格的边线走,从左上角(0,0)开始,
每次只能往右或者往下走一个单位距离,问走到右下角(n,m)一共有多少种不同的走法。
输入
共一行,包含两个整数n和m。
输出
共一行,包含一个整数,表示走法数量。
样例输入
2 3
样例输出
10
'''
def z(n,m):
if n==0 or m==0:
return 1
else:
return z(n-1,m)+z(n,m-1)
n,m=map(int,input("请输入n,m:").split())
print(z(n,m))
#138
'''138,列表翻转
给定一个长度为n的列表a和一个整数size,请你编写一个函数,reverse(size),实现将列表a中的前size个数翻转。
输出翻转后的列表a。
输入
第一行包含两个整数n和size。 第二行包含n个整数,表示列表a。
输出
共一行,包含n个整数,表示翻转后的列表a。
样例输入
5 3
1 2 3 4 5
样例输出
3 2 1 4 5
'''
def reverse(lst):
if len(lst) == 0:
return ([])
else:
return (reverse(lst[1:]) + [lst[0]] )
print(reverse([1,2,3]))
#139
'''139,不开列表递归解决倒序问题
输入若干个数,读到0为止,将读到的数据倒序输出。
要求:0不输出,且不能开列表。
'''
def reverse2(s):
if s=="":
return s
else:
return reverse2(s[1:])+s[0]
#print(reverse2('abc'))
s=input("请输入:")
s2=''
i=0
while s[i]!='0':
i+=1
s2=s[:i]
print(reverse2(s2))
#140
'''140,输入N、M,再输入N个整数形成一个保证有序的列表,问M在这个列表中有没有,
如果有输出YES,如果没有输出NO
输入
同行输入N、M,以空格分隔,接下来N行输入N个整数
输出
“yes”或“no”
样例输入
5 3
1 3 8 11 18
样例输出
yes
递归实现'''
def find(l,b):
start=0
end=len(l)-1
mid=(start+end)//2
if start==end-1:
return 'no'
else:
if l[mid]==b:
return 'yes'
elif l[mid]>b:
return find(l[start:mid+1],b)
elif l[mid]<b:
return find(l[mid:end+1],b)
N,M=map(int,input("请输入N,M:").split())
l=[]
for i in range(N):
l.append(int(input()))
print (find(l,M))