第一题:输出元素个数统计,AC100%
n,m = [int(i) for i in input().split(' ')]
A = [int(i) for i in input().split(' ')]
A = sorted(A)
query = []
for _ in range(m):
query.append(int(input()))
m = {}.fromkeys(query)
for key in m.keys():
m[key] = 0
for i in range(len(A)):
if A[i] in m:
m[A[i]] += 1
for k in query:
print(m[k])
第二题:有a,b,c三种糖果,有三个人吃,第一个人只吃ab,第二个人只吃bc,第三个人只吃ca,要求吃最多的人尽量吃少,问吃吃最多的人吃了多少,AC 30% 超时,求老哥告诉我怎么优化
def slove(a,b,c,aa,bb,cc):
if(a==0 and b==0 and c==0):
return max(aa,bb,cc)
if(a>0):
return min(slove(a-1,b,c,aa+1,bb,cc),slove(a-1,b,c,aa,bb,cc+1))
elif(b>0):
return min(slove(a,b-1,c,aa+1,bb,cc),slove(a,b-1,c,aa,bb+1,cc))
elif(c>0):
return min(slove(a,b,c-1,aa,bb,cc+1),slove(a,b,c-1,aa,bb+1,cc))
for _ in range(n):
a,b,c = [int(i) for i in input().split(' ')]
print(slove(a,b,c,0,0,0))
第三题:可以循环的列表里面(头尾相连),问能否找到一个划分,使得划分的两部分的和相等。 AC60% ,超时,求老哥告诉我怎么优化
for _ in range(c):
input()
A = [int(i) for i in input().split(' ')]
sumA = sum(A)
target = sumA//2
if(sumA%2==1):
print("NO")
continue
find = False
# O(n^2)
for i in range(len(A)):
sum_local = 0
for j in range(i+1,len(A)):
sum_local += A[j]
if(sum_local==target):
print("YES")
find = True
break
if find:
break
if not find:
print("NO")
第四题:跳格子,每次最多可以跳k格,要求当前格子高度比跳跃过去的格子高度大,但是允许使用一次超能力,可以无视格子高度的条件,但是还是最多能跳k格。问能否跳跃到第n个格子。AC 100%
def zeros(n,m):
return [[0 for i in range(m)] for j in range(n)]
def slove(A,k,super_power):
n = len(A)
dp = zeros(len(A),2)
dp[n-1][0] = 1
dp[n-1][1] = 1
for i in range(n-1)[::-1]:
for j in range(1,k+1):
if i+j<n:
if(dp[i][0]==0):
dp[i][0] = 1 if (A[i+j]<=A[i] and dp[i+j][0]==1) else 0
if(dp[i][1]==0):
dp[i][1] = 1 if (A[i+j]<=A[i] and dp[i+j][1]==1) or(A[i+j]>A[i] and dp[i+j][0]==1) else 0
return dp[0][1]
c = int(input())
for _ in range(c):
n,k = [int(i) for i in input().split(' ')]
A = [int(i) for i in input().split(' ')]
if(slove(A,k,1)):
print("YES")
else:
print("NO")