CodeForces - 1472E- Correct Placement -python

CodeForces - 1472E- Correct Placement
E
在这里插入图片描述
题意
题目说的是朋友 我个人觉得转换成矩形更好形容
有n 个矩形 对于每个矩形可以将它横着放或者竖着放 问能否找到另一个矩形J能够放在 i 前面并且不将 i 遮挡(i的高宽都要有剩余) 如果有的话输出符合条件的矩形的编号 否则输出-1
解题思路
理解的话好像不难想 我个人觉得难在 将其用代码表示出来
就 找到一个比这个矩形长宽都小的矩形 先将h w比较大小 将小的放在前面(这样小的和小的比不容易出错)然后 再加上序号存到新的列表(因为最后结果是输出他的序号)
再将宽降序 高升序排列(**注意:**这里一定要有一个降序一个升序 防止一个值相等而另一个值有大小也被当做符合条件)
全是升序的情况:

一个升序一个降序的情况:
在这里插入图片描述
代码

for _ in range(int(input())):  #组数
    n = int(input())  # 个数
    hw = []#存储高宽列表
    for i in range(n):  # 有几个人 循环几次
        h, w = map(int, input().split())  # 输入高 宽
        if h > w:  # 将宽高按升序排列
            h, w = w, h
        hw.append((i, h, w))  # 将宽高插入列表 并在前面标序号 每三个一组
    # print(hw)
    hw.sort(key=lambda x: x[2], reverse=True)  # 按照宽的大小 降序
    # print(hw)
    hw.sort(key=lambda x: x[1], reverse= False )#在原基础上再以高为标准 用升序
    # print(hw)
    aa = (-1, 10 ** 10)
    ans = [-1] * n

    for i, h, w in hw:
        if aa[1] < w:#比较宽的大小 这个时候aa[1]已经是 小高数对应的宽了 若有符合的宽 则将这个序号输出
            ans[i] = aa[0] + 1

        else:#将最小的第二个数的第三个数取出 ===高最小 输出他的序号和宽
            aa = (i, w)

    print(*ans) #去【】将内容输出
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值