题目链接:https://codeforces.com/contest/1278/problem/B

题目大意:

给定两个整数a,b,现在进行以下的操作:

第一次操作,从a,b两个数中选择一个+1。

第二次操作,从a,b两个数中选择一个+2。

第三次操作,从a,b两个数中选择一个+3。

....

问你最少需要多少步骤的操作,使得a,b两个整数相等?

思路:

要让两个数相等,我们肯定尽可能地弥补两个数的差值,设比较小的数为a,比较大的数位b,两者差值为del

我们先将所有操作给到a身上,直到a>=b,此时有

newdel为新的差值。

  • 如果newdel为偶数,我们考虑之前加在a上的值:1+2+3+...+k。如果现在我们不把一个数x加在a上,而是加在b上,那么对于上面的等式,是不是就相当于将newdel减去2*x呢?也就是说,我可以通过改变之前的k个操作的位置,构造出任何小于k*(k+1)的偶数的差!所以,此时答案就是k。
  • 如果newdel为奇数,我们通过上面的方法只能构造出偶数,所以不能再向上面那样操作了。我们再在a上加上k+1,此时newdel=newdel+k+1,我们又可以接着利用上面的结论判断:
    • 如果k+1为奇数,那么newdel+k+1为偶数,可以凑出来,答案就是k+1
    • 如果k+1为偶数,那么newdel+k+1为奇数,此时仍然不能凑出来,但是k+2一定是奇数,newdel+k+2一定可以构造出来,所以答案就是k+2
#include <bits/stdc++.h>
#define int long long
using namespace std;const int maxn=100000+10;
int sum[maxn];
void init(){sum[0]=0;for(int i=1;i<maxn;i++){sum[i]=sum[i-1]+i;}
}
signed main(){int T;init();scanf("%lld",&T);while(T--){int a,b;scanf("%lld%lld",&a,&b);int del=abs(a-b);if(del==0){puts("0");continue;}int ans=0;int inx=0;for(int i=1;i<maxn;i++){if(sum[i]>=del){ans=sum[i];inx=i;break;}}if(ans==del){printf("%lld\n",inx);}else{int now=ans-del;if(now%2==0){printf("%lld\n",inx);}else{if((inx+1)%2==0){printf("%lld\n",inx+2);}else{printf("%lld\n",inx+1);}}}}return 0;}
/*
100
1 1000000000
999999999 1
1 999999998
999999997 1
1 999999996
999999995 1
1 999999994
999999993 1
1 999999992
999999991 1
1 999999990
999999989 1
1 999999988
999999987 1
1 999999986
999999985 1
1 999999984
999999983 1
*/

Codeforces 1278 B. A and B (思维题)相关推荐

  1. codeforces The Artful Expedient(数学思维题)

    题目链接: http://codeforces.com/contest/869/problem/A 题目大意: 给你一个n,分别输入两组n个数字,如果这两组数字两两异或的结果与两组数字中的某一个数字相 ...

  2. CodeForces 104B-Testing Pants for Sadness(思维题)

    The average miner Vaganych took refresher courses. As soon as a miner completes the courses, he shou ...

  3. Codeforces 1077B Disturbed People(思维题)

    Codeforces 1077B Disturbed People(思维题) There is a house with nn flats situated on the main street of ...

  4. codeforces 有意思的思维题 1 ~ 15

    codeforces 思维题 1.给定数组,求满足i < j and ai * aj = i + j的数对数量 2.第 i 步向前跳 i 步或后退 1 步 3.给两个点,求正方形的另两个点 4. ...

  5. CF--思维练习-- CodeForces - 215C - Crosses(思维题)

    ACM思维题训练集合 There is a board with a grid consisting of n rows and m columns, the rows are numbered fr ...

  6. CodeForces - 1102A(思维题)

    https://vjudge.net/problem/2135388/origin Describe You are given an integer sequence 1,2,-,n. You ha ...

  7. ☆【CodeForces - 764C】Timofey and a tree (思维题,树的性质)

    题干: Each New Year Timofey and his friends cut down a tree of n vertices and bring it home. After tha ...

  8. Educational Codeforces Round 67 (Rated for Div. 2)(D思维题 线段树/E树形dp(换根dp) 二次扫描与换根法)

    心得 D写了个假算法被hack了wtcl- E据涛神说是二次扫描与换根法,看了看好像和树形dp差不多 F概率dp G费用流 回头再补 思路来源 马老师 归神 贤神等代码 http://www.mami ...

  9. ACM思维题训练 Section A

    题目地址: 选题为入门的Codeforce div2/div1的C题和D题. 题解: A:CF思维联系–CodeForces -214C (拓扑排序+思维+贪心) B:CF–思维练习-- CodeFo ...

  10. little w and Soda(思维题)

    链接:https://ac.nowcoder.com/acm/contest/297/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...

最新文章

  1. 嵌入式开发「坑」太多?MathWorks 高级工程师教你 debug
  2. 15:18 2009-7-5 小结
  3. java 配置微信js sdk_解析微信JS-SDK配置授权,实现分享接口
  4. 2018-07-17-Python全栈开发day28-描述符应用与类的装饰器-part1
  5. A02_Python(基本数据类型,容器,函数,类),Numpy(数组array,数组索引,数据类型,数组中的数学,广播)
  6. 董明珠宣布开启抖音直播卖货首秀,对刚“半价”直播罗永浩?
  7. Java中HttpClient设置超时时间
  8. 如何在线伪造邮箱发件人,用任意邮箱发送邮件
  9. 对称密钥、非对称密钥、数字签名、数字证书
  10. html特殊符号圆点,HTML特殊符号(字符实体)大全
  11. 利用QVOD架设流媒体服务器/电影服务器/vod服务器
  12. iPhone下mp4视频无法播放和部分手机只有声音没有画面
  13. RPA 百年简史 机器人流程自动化知多少
  14. 密码学实验_7_S盒创建(python 实现)
  15. 【 react】react实现页面后退按钮(goBack())
  16. 简单的java爬虫程序
  17. 【毕业答辩】毕业设计答辩如何答辩?
  18. java 重载条件
  19. 威胁手游安全,这些知识点你要了解看看!
  20. SassScript(sass使用)

热门文章

  1. Web前端之布局模型
  2. Android项目实践(四)——音乐播放器APP
  3. 查看WIN10 SDK的版本
  4. 八数码(Eight Digits)问题:宽度优先搜索、全局择优搜索、A*算法(C语言实现)
  5. Java零基础必看学习教程,Java开发环境配置详解
  6. android使用精伦身份证读卡器读身份证
  7. Android开发12年高级工程师:作为 IT 行业的过来人,我想对你们说~(职场必看!!!)
  8. raid0 raid1 raid5 三种工作模式的工作原理及特点
  9. chipmunk创建和销毁刚体过程
  10. cad角度命令怎么输入_CAD教程 | CAD大佬也是这样过来的,制图命令的输入方法及操步骤...