You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodeChef MELTGOLD问题代码TLE求助:计算熔炉达熔点最短时间

问题描述

Chef有一块熔点为X度的矿石,他的熔炉初始温度为Y度。第i分钟结束后,熔炉温度会升高i度。
请计算矿石开始熔化所需的最短时间(分钟数)。
注意:
我们只关注每分钟结束时的温度,不考虑分钟过程中的温度变化。
当熔炉温度大于或等于熔点时,矿石开始熔化。

代码超时问题求助

我编写了如下代码,但遇到了TLE(超时)问题,请求帮助优化代码以解决超时问题:

t = int(input())
for i in range(t):
    x, y = map(int, input().split())
    time = 0
    # x %= pow(10, 9) + 7
    # y %= pow(10, 9) + 7

    if x == y:
        print(0)
    
    else:
        while(x>y):
            time += 1 
            y += time
        
        print(time)
优化方案

超时原因

原代码通过while循环逐分钟模拟温度变化,当X和Y的差距极大(比如达到1e9级别)时,循环次数会高达数万次,直接导致超时。

数学推导优化

经过n分钟后,熔炉总温度为:
Y + 1 + 2 + ... + n = Y + n*(n+1)/2
我们需要找到最小的n,使得Y + n*(n+1)/2 >= X,即n*(n+1)/2 >= S(其中S = max(0, X-Y))。

解二次方程n² + n - 2S = 0,正根为:
n = [-1 + sqrt(1 + 8*S)] / 2
取该值的上取整,即为所需的最短时间。

优化后代码

import math

t = int(input())
for _ in range(t):
    x, y = map(int, input().split())
    if y >= x:
        print(0)
        continue
    s = x - y
    # 计算满足条件的最小n值
    n = math.ceil((-1 + math.sqrt(1 + 8 * s)) / 2)
    print(n)

该方案将每组测试用例的时间复杂度降至O(1),彻底解决超时问题。

内容的提问来源于stack exchange,提问作者Bobburi Manasa Adithy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 13:17:23