1 条题解

  • 1
    @ 2024-2-9 1:28:38

    Part 1

    先来模拟一下样例第 44 组数据,答案为 116116

    i\color{blue}i 1\color{blue}1 2\color{blue}2 3\color{blue}3 4\color{blue}4 5\color{blue}5 6\color{blue}6 7\color{blue}7 8\color{blue}8 9\color{blue}9 10\color{blue}10
    sis_i 66 33 2\color{red}2
    hih_i 66 88 1010 1212 1414 1616 1818 2020

    再来模拟一下样例第 55 组数据,答案为 20772077

    i\color{blue}i 1\color{blue}1 2\color{blue}2 3\color{blue}3 4\color{blue}4 5\color{blue}5 6\color{blue}6 7\color{blue}7 8\color{blue}8 9\color{blue}9 10\color{blue}10 11\color{blue}11 12\color{blue}12 13\color{blue}13 14\color{blue}14 15\color{blue}15 16\color{blue}16 17\color{blue}17 18\color{blue}18 19\color{blue}19 20\color{blue}20 21\color{blue}21 22\color{blue}22 23\color{blue}23
    sis_i 4444 2222 1515 1212 1010 99 88 7\color{red}7
    hih_i 4444 4545 4848 5050 5454 5656 6363 7070 7777 8484 9191 9898 105105 112112 119119 126126 133133 140140 147147 154154 161161

    Part 2

    不难发现,当 siis_i \le i 时,sis_i 便不再变化了。

    证明:

    siis_i \le i,则:

    hi=i×sih_i=i \times s_i hii+1=i×sii+1\dfrac{h_{i}}{i+1}=\dfrac{i \times s_i}{i+1}
    siis_i \le i sii11s_i-i-1 \le -1 sii1<0s_i-i-1<0
    $$s_i = \dfrac{i \times s_i + s_i}{i+1} > \dfrac{i \times s_i}{i+1}>\dfrac{i \times s_i+s_i-i-1}{i+1}=s_i-1 $$si>i×sii+1>si1s_i>\dfrac{i \times s_i}{i+1}>s_i-1 si>hii+1>si1s_i>\dfrac{h_{i}}{i+1}>s_i-1 hii+1=si\lceil \dfrac{h_{i}}{i+1} \rceil=s_i si+1=sis_{i+1}=s_i

    sis_i 不再变化。

    Part 3

    此外,当这个时刻到来时,i2ai \le \sqrt{2a}

    证明:

    siis_i \le i 等价于 hii2h_i \le i^2。设 f(i)=hif(i)=h_ig(i)=i2g(i)=i^2d(i)=f(i)g(i)d(i)=f(i)-g(i),则 f(1)=af(1)=ag(1)=1g(1)=1d(1)=a1d(1)=a-1siis_i \le i 等价于 d(i)0d(i)\le0

    ii 增加 11(即设 j=i+1j=i+1)时,g(j)g(i)=2j1g(j)-g(i)=2j-1

    显然:

    hijhij<1\lceil \dfrac{h_{i}}{j} \rceil-\dfrac{h_{i}}{j}<1 $$\lceil \dfrac{h_{j-1}}{j} \rceil \times j-\dfrac{h_{i}}{j} \times j<j $$hjhi<jh_j-h_i<j f(j)f(i)<jf(j)-f(i)<j f(j)f(i)j1f(j)-f(i)\le j-1

    故 $d(j)-d(i)=[f(j)-g(j)]-[f(i)-g(i)]=[f(j)-f(i)]-[g(j)-g(i)]\le (j-1)-(2j-1)=-j$,即 d(j)d(i)jd(j)-d(i)\le-j

    也就是说,当 ii 增加到 j=i+1j=i+1 时,dd 函数的值至少减小 jj

    i=2ai=\sqrt{2a} 时,$d(i)=a-1-2-3-\ldots-\sqrt{2a}=a-\dfrac{(1+\sqrt{2a})\times \sqrt{2a}}{2}=-\sqrt{\dfrac{a}{2}}<0$,显然这个时刻已经到来。

    Part 4

    于是,我们暴力计算 h1h2ah_1 \sim h_{\sqrt{2a}},剩下的是等差数列,套公式就行了。

    最终的时间复杂度为 O(Ta)O(T\sqrt{a}),空间复杂度为 O(1)O(1)

    Part 5

    std:

    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
    	int T;
        cin >> T;
        while (T--)
        {
            long long n, a, i;
            cin >> n >> a;
            long long w = a;
    	    for (i = 2; i <= n; i++)
    	    {
    		    if (a % i) a += (i - a % i);
    		    w += a;
    		    if (a / i <= i) break;
    	    }
    	    if (i < n) w += (n - i) * (a / i * (i + 1) +  a / i * n) / 2;
    	    cout << w << endl;
        }
    	return 0;
    }
    
    • 1

    信息

    ID
    11
    时间
    3000ms
    内存
    512MiB
    难度
    5
    标签
    (无)
    递交数
    1
    已通过
    1
    上传者