1 条题解

  • 0
    @ 2025-8-24 21:15:32

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar cff_0102
    & aqua_qaq | 团子群 185800038 | 如果我死了说明我 AFO 了

    搬运于2025-08-24 21:15:31,当前版本为作者最后更新于2023-12-27 21:50:29,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    题解区怎么没有纯数学解法。

    这道题,可以先分别计算出起始时刻和结束时刻是一天当中的第几秒,然后再作差,就能直接得到答案。

    已知有一个时刻是 (a+1):(b+1):(c+1)(a+1):(b+1):(c+1),怎么计算出它是一天中的第几秒呢?

    首先,把这个时刻拆成 (a+1)(a+1) 个小时,(b+1)(b+1) 分钟和 (c+1)(c+1) 秒。

    由题意得,某一小时的第 bb 分钟共有 10b+110b+1 秒,则某一小时从第 00 分钟到第 bb 分钟(共 b+1b+1 分钟)就一共过去了 $(10\times0+1)+(10\times1+1)+(10\times2+1)+\dots+(10b+1)$ 秒。根据等差数列求和公式,这个算式的结果是 $\dfrac{(10\times0+1+10b+1)\times(b+1)}{2}=5b^2+6b+1$。

    由题意得,一天中的第 aa 小时共有 a+1a+1 分钟(从第 00 分钟到第 aa 分钟),根据上面的计算,则这一小时共有 5a2+6a+15a^2+6a+1 秒。从第 00 个小时到第 aa 个小时(共 a+1a+1 个小时)就一共过去了 $(5\times0^2+6\times0+1)+(5\times1^2+6\times1+1)+\dots+(5a^2+6a+1)$ 秒。把它们拆开,变成 $5\times(0^2+1^2+\dots+a^2)+6\times(0+1+\dots+a)+(1+1+\dots+1)$,分别代入平方和公式、等差数列求和公式和项数 aa,得到原式等于 $\dfrac{5a(a+1)(2a+1)}{6}+3a(a+1)+(a+1)=\dfrac{10a^3+33a^2+29a+6}{6}$。

    然后把它们相加,设 f(a+1,b+1,c+1)f(a+1,b+1,c+1) 表示 (a+1):(b+1):(c+1)(a+1):(b+1):(c+1) 是一天中的第几秒:

    $$f(a,b,c)=\dfrac{10(a-1)^3+33a^2+29a+6}{6}+5b^2+6b+c+2 $$

    则此题的答案为:f(E1,F1,G1)f(A1,B1,C1)f(E-1,F-1,G-1)-f(A-1,B-1,C-1)

    如果这个数为负数,就说明这个时间范围跨了一天。所以输出答案的时候还需要先将其加上一天的秒数,再取模,得到一个范围在 00 和一天秒数之间的数,那就是答案。

    def f(a,b,c):
        return (10*a*a*a+33*a*a+29*a+6)//6+5*b*b+6*b+c+2
    
    t=int(input())
    
    while t:
        t-=1
        n,A,B,C,E,F,G=input().split()
        n,A,B,C,E,F,G=(int(n),int(A),int(B),int(C),int(E),int(F),int(G))
        tmp=f(n-1,0-1,0-1)
        print((f(E-1,F-1,G-1)-f(A-1,B-1,C-1)+tmp)%tmp)
    
    • 1

    信息

    ID
    9198
    时间
    1000ms
    内存
    128MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者