题目1:给定一个字符串,KICK出现在START前面算一个有效序列,问共有多少个有效序列,不同序列之间可重叠,只要两个序列的KICK或START位置不同则视为不同序列。注意不同序列之间有重叠,即KICKICKSTART是两个有效序列。
T=int(input())
for tt in range(T):
ss=input()
n=len(ss)
if n<=8:
ans=0
else:
num_kick=0
ans=0
i=0
while i<=n-5:
if ss[i:i+4]=='KICK':
num_kick+=1
i+=3
elif ss[i:i+5]=='START':
ans+=num_kick
i+=5
else:
i+=1
print('Case #{}: {}'.format(tt+1,ans))
题目2:可获得最大硬币数,因为只能左上或右下移动且硬币数均为正值,所以直接从第一行和第一列所有元素出发,求所在对角线上元素之和即可。
T=int(input())
for tt in range(T):
N=int(input())
puzzle=[]
for i in range(N):
puzzle.append([int(s) for s in input().split()])
cur_max=0
for i in range(N):
j=0
cur_sum=0
while i<N and j<N:
cur_sum+=puzzle[i][j]
i+=1
j+=1
cur_max=max(cur_max,cur_sum)
for i in range(N):
cur_sum=0
j=0
while i<N and j<N:
cur_sum+=puzzle[j][i]
i+=1
j+=1
cur_max=max(cur_max,cur_sum)
print('Case #{}: {}'.format(tt+1,cur_max))
后两题只分别作出两问和一问,待明天面完阿里再回来整理学习。