202203-1 未初始化警告
解答:
import sys
n,k = map(int,sys.stdin.readline().split())
x_flag = [False]*(n+1) #k条语句,n个变量,从1到n
x_flag[0] = True
# y = [0]*k
num = 0
for i in range(k):
x,y = map(int,sys.stdin.readline().split())
if x_flag[y] == False:
num += 1
x_flag[x] = True
print(num)
202203-2 出行计划
解答:
70分:
import sys
n,m,k = map(int,sys.stdin.readline().split()) #计划数,查询数,等待核酸时间
time_space = [[] for i in range(n)]
for i in range(n):
end_time,t = map(int,sys.stdin.readline().split())
start_time = end_time - t + 1
time_space[i] = [start_time,end_time+1]
q = [0] * m
for i in range(m):
q[i] = int(input()) + k
for t in q:
num = 0
for x in range(n):
if t in range(time_space[x][0],time_space[x][1]):
num += 1
# print(t,x,time_space[x][0],time_space[x][1])
print(num)
尝试折半查找优化:
import sys
n,m,k = map(int,sys.stdin.readline().split()) #计划数,查询数,等待核酸时间
time_space_start = [0] * n
time_space_end = [0] * n
def search(qt):
low = 0
high = n-1
mid = 0
while low <= high:
mid = (low + high) // 2
if time_space_end[mid] == qt:
return mid
elif time_space_end[mid] > qt:
high = mid - 1
elif time_space_end[mid] < qt:
low = mid + 1
return low
for i in range(n):
end_time,t = map(int,sys.stdin.readline().split())
time_space_start[i] = end_time - t
time_space_end[i] = end_time
q = [0] * m
for i in range(m):
q[i] = int(input()) + k
for qt in q:
num = 0
t_index = search(qt)
for x in time_space_start[t_index:]:
if qt > x:
num += 1
# print(qt,x,t_index)
print(num)
还是超时
100分:
https://blog.csdn.net/m0_62894677/article/details/125796747
参考
import sys
n,m,k = map(int,sys.stdin.readline().split())
N = 2*10**5 + 10
step = [0] * N
ans = [0] * N
for i in range(n):
t,c = map(int,sys.stdin.readline().split())
left = max(0,t-k-c+1)
right1 = max(0,t-k)
right = min(right1,N)
step[left] += 1
step[right + 1] -= 1
ans[0] = step[0]
for i in range(1,N):
ans[i] = ans[i-1] + step[i]
for i in range(m):
print(ans[int(input())])