1 条题解
-
0
我想了一下,传统的 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
- 上传者