1 条题解

  • 0
    @ 2026-4-8 22:42:43

    我想了一下,传统的 a+b 还是太吃操作了,我们有没有什么更有趣的算法来解决呢,有的兄弟有的,我这边推荐二分,二分是一个很有用的算法,在红题到黑题你都能看到他的身影!

    我们假设 mid 为我们当前二分的值,l,r 为我们目前已经锁定的左右边界。

    每次二分开始的时候,我们将 mid 设为 l,r 的平均值,也就是
    2 l+r ​ ,在本题因为没有小数,所以我们可以向下取整。

    如果 a+b<mid,那么说明 mid 大了,这个时候我们把右边界 r 设为 mid−1 就好了。

    如果 a+b>mid,那么说明 mid 小了,这个时候我们把左边界 l 设为 mid+1 就好了。

    如果 a+b=mid,那么恭喜你,你找到了答案!这个时候我们输出这个 mid 就可以了!

    我们可以使用 while 循环来重复这个过程,直到我们找到答案。

    由于过程中可能会爆 int,所以我们需要可以储存更大整数变量的类型:long long!

    附上一份代码,如果想要真正踏入编程的世界,那么是不可以复制别人的代码提交的,需要你亲手打出来,体验编程之美!

    #include<iostream>
    using namespace std;
    long long a,b;
    int main(){
    	long long l=-2e9,r=2e9,mid;
    	cin>>a>>b;
    	while(l<=r){
    		mid=(l+r)>>1;
    		if(a+b==mid){
    			cout<<mid;
    			break;
    		}
    		else if(a+b<mid){
    			r=mid-1;
    		}
    		else if(a+b>mid){
    			l=mid+1;
    		}
    	}
    	return 0;
    }
    
    

    如果你通过了这道题,那么恭喜你,你可以开始看最简单的题解(是的没错)

    • 1

    信息

    ID
    108
    时间
    1000ms
    内存
    256MiB
    难度
    4
    标签
    (无)
    递交数
    332
    已通过
    147
    上传者