我试图用Python解决这个cp问题,但由于某些原因,对于非常大的值,答案是错误的,例如这个输入:

5
3949  45969  294854  9848573 2147483647
5
10000  6  2147483647  4959 5949583

可接受输出:

3949 45969
X 3949
9848573 X
3949 45969
294854 9848573

我的输出:

X 294854
X 294854
9848573 X
X 294854
45969 9848573

我的代码:

def bs(target, search_space):
    l, r = 0, len(search_space) - 1

    while l <= r:
        m = (l + r) >> 1
        if target == search_space[m]:
            return m - 1, m + 1
        elif target > search_space[m]:
            l = m + 1
        else:
            r = m - 1

    return r, l


n = int(input())
f_heights = list(set([int(a) for a in input().split()]))
q = int(input())
heights = [int(b) for b in input().split()]

for h in heights:
    a, b = bs(h, f_heights)
    print(f_heights[a] if a >= 0 else 'X', f_heights[b] if b < len(f_heights) else 'X')

任何帮助都将不胜感激!

推荐答案

这是因为将第一个输入插入到set,这会改变列表中数字的顺序.如果您使用的是Python 3.6或更新版本

f_heights = list(dict.fromkeys(int(a) for a in s.split()))

例子:

f_heights = list(set([int(a) for a in input().split()]))
print(f_heights) # [294854, 3949, 45969, 9848573, 2147483647]

f_heights = list(dict.fromkeys(int(a) for a in input().split()))
print(f_heights) # [3949, 45969, 294854, 9848573, 2147483647]

Python相关问答推荐

如果条件为真,则Groupby.mean()

韦尔福德方差与Numpy方差不同

将整组数组拆分为最小值与最大值之和的子数组

'discord.ext. commanders.cog没有属性监听器'

Python 约束无法解决n皇后之谜

当独立的网络调用不应该互相阻塞时,'

在np数组上实现无重叠的二维滑动窗口

无法在Docker内部运行Python的Matlab SDK模块,但本地没有问题

SQLAlchemy bindparam在mssql上失败(但在mysql上工作)

在两极中过滤

python—telegraph—bot send_voice发送空文件

在matplotlib中使用不同大小的标记顶部添加批注

从源代码显示不同的输出(机器学习)(Python)

在Python中控制列表中的数据步长

使用Python TCP套接字发送整数并使用C#接收—接收正确数据时出错

为什么后跟inplace方法的`.rename(Columns={';b';:';b';},Copy=False)`没有更新原始数据帧?

我如何处理超类和子类的情况

如何在Polars中创建条件增量列?

将数据从一个单元格保存到Jupyter笔记本中的下一个单元格

正则表达式反向查找