2022-05-16每日刷题打卡

2022-05-16每日刷题打卡

代码源——每日一题

最喜欢数学了(高数除外) - 题目 - Daimayuan Online Judge

小明的数学很好,所以他认为世界上所有的数学问题都很简单。

但是有一天,他遇到了一个他无法解决的数学问题,所以他请求你帮助他。

小明会给你两个数字 a 和 b ,然后你应该选择一个正奇数 x 和一个正偶数 y ,你可以让 a 加上 x 或让 a 减去 y,在一次运算中。你应该在最少的操作中把 a 变成 b。请注意,在同一次运算中,你不允许改变 x 和 y 的值。

输入格式

在第一行,有一个整数 T。

接下来 T 行每行2个整数 a、b。表示由小明给出的数字。

输出格式

一个数,表示将 a 变为 b 所需的最小操作数。。

样例输入
1
10 7
样例输出
2
数据规模

所有数据保证 1≤T≤105,1≤a,b≤106。

问题解析

这是今年浙江省赛的a题,一个比较简单的结论题。

1、如果a>b:

(1)两者差是偶数,我们可以通过直接减去一个y得到(这个y是我们自己随便设的,当然可以设成这个差),所以是1步

(2)两者差是奇数时,我们可以先个a加一个奇数,这样a和b的差就是偶数了,然后同上,所以是1+1=2步

2、如果a<b

(1)两者差是奇数时,我们可以通过加上一个x得到,所以是1步

(2)如果差是偶数,此时有两种情况,一是这个差可以由两个相同的奇数得到:比如a=3,b=9,那么他们的差是6,可以由两个3得到,那么此时就是2步;第二个情况就是差不由相同的奇数得到,那么我们可以给a加上两个奇数,再减去一个偶数得到,比如a=5,b=13,差是8,我们可以给a加上两个7(确保加上后大于b即可),a=19,此时a和b差为偶数,通过之前的结论可知是一步,所以是1+2=3步。

3、如果a==b,那么一步也没有,是0.

#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<math.h>
#include<set>
#include<numeric>
#include<string>
#include<string.h>
#include<iterator>
#include<map>
#include<unordered_map>
#include<stack>
#include<list>
#include<queue>
#include<iomanip>

#define endl '\n';
typedef long long ll;
typedef pair<ll, ll>PII;
const int N = 2e5 + 50;

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);
	int t;
	cin >> t;
	while (t--)
	{
		int x, y;
		cin >> x >> y;
		if (x == y)
		{
			cout << 0 << endl;
		}
		else if (x > y)
		{
			if ((x - y) % 2 == 0)
			{
				cout << 1 << endl;
			}
			else cout << 2 << endl;
		}
		else
		{
			if ((y - x) % 2 == 1)
			{
				cout << 1 << endl;
			}
			else if ((y - x) / 2 % 2 == 1)
			{
				cout << 2 << endl;
			}
			else cout << 3 << endl;
		}
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值