(每日一练70093)题目名称:近视的小张

文盲老顾
新星创作者: 信息安全技术领域
领域专家: 数据库技术领域
2023-05-13 12:13:24

小张和他的 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)
})
...全文
290 2 打赏 收藏 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
文盲老顾 2023-06-16
  • 打赏
  • 举报
回复

重写一个 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])
}
文盲老顾 2023-06-03
  • 打赏
  • 举报
回复

因为之前把津津的储蓄计划弄到 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])
源码直接下载地址: https://pan.quark.cn/s/854bd57df23a 在金融行业中,房产购置贷款是众多人在购置不动产时必须进行的一项财务规划。Matlab作为一种功能强大的数学及数据分析平台,经常被应用于各类复杂的运算,其中包括住房贷款的计算。本文将详细研究运用Matlab开发住房贷款计算程序的相关知识要点,以协助读者掌握如何借助编程技术处理实际的信贷问题。 1. **信贷种类** - **商业信贷**:此类贷款通常由金融机构提供,其利率会随市场行情变化,借款人可选用固定利率或浮动利率方案。 - **公积金信贷**:该类贷款获得政府机构的支持,利率一般低于商业信贷,但设有最高贷款金额的限制。 2. **偿付模式** - **等额本金偿付**:每月支付相同数量的本金,利息部分逐月减少,因此整体还款总额会逐步降低。 - **等额本息偿付**:每月支付固定金额的本金与利息组合,利息部分随本金的逐月减少而递减。 3. **住房贷款计算公式** - **等额本息偿付**:每月还款额=贷款本金×[月利率×(1+月利率)^(贷款期数)]÷[(1+月利率)^(贷款期数)-1]。 - **等额本金偿付**:每月应还本金=贷款总额/贷款期数,每月利息=(贷款余额-累计已还本金)×月利率。 4. **Matlab编程基础** - **变量设定**:在Matlab环境中,首要任务是设定贷款数额、年化利率、贷款时长等核心参数。 - **循环控制结构**:借助for循环来模拟每个还款周期的过程,进行本金与利息的计算。 - **函数构建**:将住房贷款的计算逻辑封装为函数,便于重复使用和测试不同条件下的结果。 5. **Matlab代码编写** - **等额本息函数实现**...

320

社区成员

发帖
与我相关
我的任务
社区描述
主要用于技术交流,包括但不限于 .net,mssql,js,css,python,算法,运维。也可以晒最新技术,美图,运动等。最后,如果有问题,可以提问,老顾能帮忙的会尽量帮忙哦。
前端sqlserverasp.net 技术论坛(原bbs) 北京·西城区
社区管理员
  • 文盲老顾
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧