zoukankan      html  css  js  c++  java
  • B. A and B(数学推导)

    (本文思路完全来源于)starlet_kiss

    (color{Red}{----------分割线-------------})

    (开始a,b,x=abs(a-b))

    (现在要求pm1pm2pm3....pm{n}=x)

    (一开始我们一直加直到color{Red}{超过x时停下})

    (1+2+3...+n=x+y(刚好超过了x,加到了x+y))

    (color{Orange}{Ⅰ.当y为偶数,那么前面有一次frac{y}{2}我们不加,而是减去它,就得到了x})

    (这种情况下,只需要操作n次即可(一定最优))

    (color{Green}{Ⅱ.y为奇数,此时y不能被2整除})

    (那我们就构造出新的y为偶数)

    (Ⅱ.1. 当n+1为奇数时)

    (1+2+3...+(n+1)=x+y(此时y被构造成了偶数))

    (那么这时候需要操作n+1次)

    (Ⅱ.2. 当n+1为偶数,那么n+2为奇数)

    (1+2+3...+(n+2)=x+y(此时y被构造成了偶数))

    (那么此时需要操作n+2次)

    #include <bits/stdc++.h>
    using namespace std;
    #define int long long 
    int n,m,t;
    signed main()
    {
    	cin>>t;
    	while(t--)
    	{
    		cin>>n>>m;
    		int x=abs(n-m);
    		int l=0,r=1e6,mid;
    		while(r>l)
    		{
    			mid=(l+r)/2;
    			if(mid*(mid-1)/2+mid>=x)	r=mid;
    			else	l=mid+1;
    		}
    		int y=r*(r-1)/2+r-x;
    		if(y%2==0)	cout<<r<<endl;
    		else if((r+1)%2==1)	cout<<r+1<<endl;
    		else	cout<<r+2<<endl;
    	}
    }
    
  • 相关阅读:
    SqlServer 格式化时间
    工作生活两三事
    前端面试题准备 3
    前端面试题准备 2
    MYSQL---自定义函数
    MYSQL---MD5()、PASSWORD()函数
    MYSQL---DATE_ADD()
    MYSQL---%
    MYSQL---多表删除
    MYSQL---CREATE...SELECT
  • 原文地址:https://www.cnblogs.com/iss-ue/p/12899524.html
Copyright © 2011-2022 走看看