问题如下:
迪克12岁。当我们这样说的时候,我们的意思是,迪克出生至少已经十二年了,但还没有十三年。
迪克和简有三个宠物:发现狗,吹猫,和耶特尔
乌龟。帕芙出生的时候,斯派特是S岁;帕芙是P
叶特尔出生时年;叶特尔出生时年
出生。Spot的年龄、Puff的年龄和Yertle的年龄之和等于
迪克和简的年龄之和。斑有多大了,小家伙,
那耶特尔呢?
输入是s,p,y,j,输出是spot的年龄,puff的年龄和yertle的年龄。
我的解决方案如下:

import sys
import math

d = 12
for line in sys.stdin:
    line = [int(x) for x in line.strip("\n").split()]

    s = line[0]
    p = line[1]
    y = line[2]
    j = line[3]

    yertle = (d+j-y-p)/3.0
    difference = yertle - math.floor(yertle)
    if difference > 0.5:
        # for the 0.66666 cases
        spot = puff = int(math.ceil(yertle+p))
        yertle = int(math.floor(yertle))
    else:
        # for the 0.33333 cases
        yertle = int(math.floor(yertle))
        puff = yertle + p
        spot = d+j - puff - yertle

    print spot,puff,yertle

但在某些输入上是不正确的,例如:s=5,p=5,y=10,j=10。因为对于这些规格,狗的实际年龄是:spot=12.333,puff=7.333,yertle=2.333,但是因为我们做整数除法,我们得到12,7,2然而,这些结果并不能满足$$spot+puff+yertle=dick+jane$$
规则。有没有人知道我在哪里犯了错误,或者我应该如何处理/解决这个问题?
P.S.link for problem source

最佳答案

不要使用浮点运算,使用整数。
让我们表示D+J = DJ,Spot的年龄S,Puff的年龄P,Yertle的年龄Y
假设生日时间是零,那么puff出生于interval[s, s+1),yertle出生于interval[y, y+1)。当前时间间隔[S, S+1)
python - Kattis的D + J编程挑战-LMLPHP
如果我们看时间线,我们可以看到

   S = y + Y
   or
   S = y + Y + 1
and
   S = s + P
   or
   S = s + P + 1

年龄总和是
 DJ = S + Y + P = S + S - y + S - s - (0, 1, 2)

其中(0,1,2)是可能的附录
 3 * S = DJ + y + s + (0,1,2)

我们可以看到右边的部分必须被3整除,所以接下来的计算取决于值
 M =  (DJ + y + s) modulo 3

case M = 0: (5 5 10 9)
     S = (DJ + y + s) / 3 = (21 + 15) / 3 = 12
     P = S - s = 12 - 5 = 7
     Y = S - y = 12 - 10 = 2

case M = 1: (5 5 10 10)
     here we should add 2 to make sum 37 divisible by 3
     S = (DJ + y + s + 2) / 3 = (22 + 15 + 2) / 3 = 13
     P = S - s  - 1 = 13 - 5 = 1 =  7
     Y = S - y  - 1 = 13 - 10 - 1 = 2

now more complex case M = 2 (5 5 11 10):
    here we should add 1 to make sum 38 divisible by 3
    and solve - where use 1 - for P or for Y calculation?
    We can determine this evaluating s/p/y relation:
    if y = s + p + 1 then use 1 for Puff's age else for Yertle
    (because Puff's fraction is larger then Yertle's fraction,
    she was born in the later year period)
    here 11 = 5 + 5 + 1, so
    S = (22 + 16 + 1) / 3 = 13
    Y = S - y = 13 - 11 = 2
    P = S - s - 1 = 13 - 5 - 1 = 7

关于python - Kattis的D + J编程挑战,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37582134/

10-12 04:43