1.删除链表第K个节点 AC100%
n,k=map(int,input().split()) a=list(map(int,input().split())) res=a[:k-1]+a[k:] ress='' for x in res: ress+=str(x)+' ' print(ress[:-1])
2.求s中的所有子串字典序第k小的一个 ac 100%
a=input() k=int(input()) res=[] q=min(6,len(a)) for l in range(1,q): for i in range(len(a)-l+1): res.append(a[i:i+l]) res=list(set(res)) res.sort() print(res[k-1])
3.给一个正整数N(1<=N<=1e12),把N拆成任意两个正整数相加,求这两个数的数位和相加的最大值。 ac 100%
def core(a): a=str(a) def dfs(now): if now=='': return 0 res=0 temp=int(now) temp//=10 new=str(int(temp)-1) res=max(dfs(now[:-1])+int(now[-1]),res) if int(new)>=0: if now[-1]!='9': res=max(res,dfs(new)+10+int(now[-1])) return res return dfs(a) n=int(input()) for _ in range(n): a=int(input()) print(core(a))5.给一个字符串s,求要把区间[l,r]全部分割成回文串的最少分割次数。AC 100%
s=input()
n=int(input())
dp={}
def dfs1(i,j):
if (i,j) in dp:
return dp[(i,j)]
if i>j:
return True
if i==j:
return True
if j==i+1:
return s[i]==s[j]
if s[i]!=s[j]:
return False
res=dfs1(i+1,j-1)
dp[(i,j)]=res
return res
cache={}
def dfs(l,r):
if (l,r) in cache:
return cache[(l,r)]
if l>r:
return 0
if l==r:
return 1
res=1e9
for k in range(l,r+1):
if dfs1(l,k):
res=min(1+dfs(k+1,r),res)
cache[(l,r)]=res
return res
for _ in range(n):
l,r=map(int,input().split())
print(dfs(l-1,r-1))
好气,第三题考试的时候有一点BUG,一直通过0,刚考完就把BUG找出来了。

全部评论
(3) 回帖