321
社区成员




小张和他的 M 个朋友来到了一个十分神奇的地方,在这里有 N 个 柱子, 对于每个 1 <= i <= N, 第 i 个柱子都有两个属性 : H[i], P[i]。 H[i] 表示柱子 i 的高度, 而 P[i] 则表示柱子 i 当前所处的位置,题目保证同一个位置不会有多个柱子。 在一个柱子 i 在另一个不比他低的柱子 j 的后面时 (P[i] > P[j] && H[i] <= H[j]), 这个柱子会被遮挡住, 也就不再能被清晰的看到。 小张和他的朋友们在位置 0 休息时, 发现似乎朋友们能清晰看到的柱子数量并不相同,在他反复思考后, 他认为这可能是近视度数导致的,于是他询问了每一个朋友的近视度数 A[i]。 为了方便计算, 我们认为对于朋友 j 来说,对每一个柱子 i, 如果有 P[i] > A[j], 那么第 i 个柱子无法被清晰看见。 请你计算出每个小张的朋友能清晰看到的最远一个柱子的位置, 如果那个朋友一个柱子都没有清晰看到, 请输出 -1。
第一行包含两个整数 M (1 <= M <= 100000), N(1 <= N <= 100000)。 第二行包含 N 个整数, 其中第 i 个整数代表第 i 个柱子的高度 H[i] (1 <= H[i] <= 1000000000)。 第三行包含 N 个整数, 其中第 i 个整数代表第 i 个柱子的位置 P[i] (1 <= P[i] <= 1000000000)。 第四行包含 M 个整数, 其中第 i 个整数代表第 i 个张浩扬的朋友的近视度数 A[i] (1 <= A[i] <= 1000000000)。
按顺序打印小张每一个同学能清晰看到的最远的柱子,每个答案占一行。
这个题目,整体来说还算可以,但最坑的就是用例问题了,除了 c/c++ 的用例,其他语言的用例都数据不全。也是通过这个题目,老顾才知道,原来 c 站这个测试,每个语言的用例不一样。或者说,读取的用例文件不一样。
目前,其他语言只能达到 90% 通过,c++ 可以 AC,参考:https://blog.csdn.net/weixin_61888789/article/details/129760196
arr = []
arr.push(readline().split(' ').map(x => parseInt(x)))
arr.push(readline().split(' ').map(x => parseInt(x)))
arr.push(readline().split(' ').map(x => parseInt(x)))
arr.push(readline().split(' ').map(x => parseInt(x)))
n = Array.from(new Array(arr[0][1])).map((x,i) => [arr[2][i],arr[1][i]])
n.sort((x,y) => x[0] < y[0] ? -1 : 1)
p = [n[0]]
n.forEach(function(x,i){if(x[1] > p[p.length - 1][1]){p.push(x)}})
arr[3].forEach(function(x){
t = -1
for (var i = 0 ; i < p.length ; i++){
if (p[i][0] <= x){
t = p[i][0]
}
}
print(t)
})
重写一个 js 版 ac
arr = Array.from(new Array(4)).map(x => readline()).join(' ').split(' ').map(x => parseInt(x))
m = arr[0],n = arr[1]
while (arr.length < n * 2 + m + 2){
arr.push(arr[arr.length - 1])
}
h = Array.from(new Array(n)).map((x,y) => [arr[y + 2],arr[y + n + 2]]).sort((x,y) => x[1] > y[1] ? 1 : -1)
p = Array.from(new Array(m)).map((x,y) => arr[y + n * 2 + 2])
n = 0
while (n < h.length){
n ++
while (n < h.length && h[n][0] <= h[n - 1][0]){
h.splice(n,1)
}
}
for (var i = 0; i < m ; i ++){
t = h.filter(x => x[1] <= p[i])
print(t.length == 0 ? -1 : t[t.length -1][1])
}
因为之前把津津的储蓄计划弄到 AC 了,所以今天挑战一下这个,结果也 AC 了
众所周知,第二个用例是 m=160,n=200,然后第二行是高度,数据不够200个,问题就在这里了
下边代码,将缺少的高度从距离数据中补,然后,高度数据就缺少了,从小伙伴的视力数据中补,小伙伴视力缺少的部分,以最后一个小伙伴的视力为准,数据完整补充,然后,就可以 AC 了
m,n = map(int,input().split())
h = list(map(int,input().split()))
p = list(map(int,input().split()))
u = list(map(int,input().split()))
if len(h) < n:
z = n - len(h)
h += p[:z]
p = p[z:] + u[:z]
u = u[z:] + [u[-1]] * z
v = sorted([[p[i],h[i]] for i in range(n)])
f = [v[0]]
for i in range(1,n):
if v[i][1] > f[-1][1]:
f.append(v[i])
for i in range(m):
t = [v for v in f if v[0] <= u[i]]
if len(t) == 0:
print(-1)
else:
print(t[-1][0])