我该如何解决这个问题:“前进和后退的问题”?

2024-04-20 14:29:04 发布

您现在位置:Python中文网/ 问答频道 /正文

问题陈述:

桑杰对酒精上瘾。每天晚上他喝4瓶伏特加。他要回家了。一开始,他向前走了一步(5米),但由于他喝醉了,每向前走一步,他的身体就会失去平衡,他向后走了一步(3米)。你知道吗

每一步需要1分钟才能完成。从酒吧到家的距离是n米。计算他到家所花的时间。你知道吗

输入格式:

包含一个整数n的单行

约束条件:

0 <= n < 10^18

输出格式

一个整数,描述他回家所花的时间。你知道吗

from math import *
n = int(input())
x = 0
m = 0
n = n % 1000000007
n = n % 1000000007
while  x < n:
    x += 5
    m += 1
    if x >= n:
        break
    x -= 3
    m += 1
print(m)

但是在最后一个测试用例中,时间限制被超过了,即对于n=10^18这样的数字

Sample Input 0

11

Sample Output 0

7


Tags: samplefromimport距离格式时间整数math
2条回答

所用时间仅为n/2*2 他每“循环”前进2米,向前5米,向后3米 所以我们看到有多少“循环”进入n(n/2m),这将导致 在到达他家的“周期”里 然后我们简单地乘以每个周期所用的时间(2分钟) 得到所用的总时间(t=n/2*2)。你知道吗

试着减少问题。让time_taken(dist)函数告诉我们到家需要多长时间。然后,保持以下状态:

time_taken(1)  ==  1
time_taken(2)  ==  1
time_taken(3)  ==  1
time_taken(4)  ==  1
time_taken(5)  ==  1

time_taken(6)  ==  1 * 2 + time_taken(4)    (since 5-3 = 2)
               ==  1 * 2 + 1

time_taken(7)  ==  1 * 2 + time_taken(5)
               ==  1 * 2 + 1

time_taken(11) ==  1 * 2 + time_taken(9)
               ==  2 * 2 + time_taken(7)
               ==  3 * 2 + time_taken(5)
               ==  3 * 2 + 1

time_taken(26) ==  1 * 2 + time_taken(24)
               ==  2 * 2 + time_taken(22)
               ==  ...
               ==  11 * 2 + time_taken(4)
               ==  11 * 2 + 1

if n > 5:
time_taken(n)  ==  1 * 2 + time_taken(n - 2)
               ==  2 * 2 + time_taken(n - 4)
               ==  ...
               ==  (formula here) * 2 + time_taken(4 or 5)

相关问题 更多 >