【题解】高斯减法

题意

给你两个整数,让你将两个整数变为相等,其方法是每次可以选择一个数将其减去初始为,每进行一次操作,的值加一。求最小操作次数,以及最终的值。

题解

中,为较小值,若把看作一个整体,即,若考虑进行了次操作,总的减少的数量就是。那么要求最后两个数字相等,所以即满足。但是由于比较大,我们不可能去遍历的找到,那么考虑最终的结果为。由于一直在做减法操作,所以最终的结果肯定是小于等于的,那么我们就可以得到不等式。转化一下就变成了。又会有。所以就有。就能够大幅度减少能的范围,我们在的基础上向后找一个的结果即可。

复杂度

时间复杂度

代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        long long a,b;
        scanf("%lld%lld",&a,&b);
        if(a>b)
            swap(a,b);
        long long sum=2*b-2*a;
        long long c=a+b;
        long long n=sqrt(sum);
        for(long long i=n;i<=n+5;i++)
        {
            if((c-i*(i+1)/2)%2==0&&(c-i*(i+1)/2)/2<=a)
            {
                n=i;
                break;
            }
        }
        printf("%lld %lld\n",n,(a+b-n*(n+1)/2)/2);
    }
    return 0;
}
全部评论

相关推荐

03-13 10:35
安徽大学 Java
牛客246100688号:蚂蚁卡简历的,简历看不上眼全a了也不会有面试的。
投递蚂蚁集团等公司9个岗位
点赞 评论 收藏
分享
不懂!!!:感觉你的项目描述太简单了,建议使用star描述法优化提炼一下,就是使用什么技术或方案解决了什么问题,有什么效果或成果,例如:对axios进行了二次封装,实现了请求的统一管理、错误的集中处理以及接口调用的简化,显著提高了开发效率和代码维护性,使用canvas技术实现了路线绘制功能,通过定义路径绘制函数和动态更新机制,满足了简化的导航可视化需求,提升了用户体验。像什么是使用其他组件库,基本功能描述就最好不要写到项目成果里面去了,加油
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务