1 条题解

  • 0
    @ 2025-8-24 21:21:31

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar gzw2005
    可是这一切的平静、舒适和满足都要恐怖地结束,那可怎么办呢?

    搬运于2025-08-24 21:21:30,当前版本为作者最后更新于2018-01-21 10:56:06,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    本蒟蒻第一篇题解

    设首项为 LL,末项为 RR,那么 sum(L,R)=(L+R)(RL+1)2=M{\rm sum}(L,R)=\dfrac{(L+R)(R-L+1)}{2}=M.

    (L+R)(RL+1)=2M(L+R)(R-L+1)=2M.

    可以把 2M2M 分解成两个数之积,枚举假设分成了两个数 k1,k2k_1,k_2,我们令 k1<k2k_1<k_2

    可以列一个二元一次方程组{RL+1=k1L+R=k2\begin{cases} R-L+1=k_1\\ L+R=k_2 \end{cases}

    解得 $\begin{cases} L=\dfrac{k_2-k_1+1}{2}\\ R=\dfrac{k_1+k_2-1}{2} \end{cases}$.

    显然当 k1,k2k_1,k_2 一奇一偶 时,L,RL,R 才是整数.

    但是 L=RL=R 的情况是被不允许的,

    k2k1+12k1+k212\dfrac{k_2-k_1+1}{2}\neq\dfrac{k_1+k_2-1}{2},即 k11.k_1\neq1.

    #include<bits/stdc++.h>
    using namespace std;
    int m;
    int main(){
        cin>>m;
        for(int k1=sqrt(2*m);k1>1;k1--)//枚举k1(注意是k1>1而不是k1>=1)
            if(2*m%k1==0 && (k1+2*m/k1)%2){//如果K2是整数而且与K1一奇一偶
                int k2=2*m/k1;
                cout<<(k2-k1+1)/2<<" "<<(k1+k2-1)/2<<endl;//输出答案
            }
        return 0;
    }
    

    时间复杂度 O(M).O(\sqrt M).

    (upd:LATEX\rm LATEX 优化)

    • 1

    信息

    ID
    149
    时间
    1000ms
    内存
    125MiB
    难度
    2
    标签
    递交数
    1
    已通过
    1
    上传者