题意
给定两个数,A-B,一共有三种操作
1.A=A+1;
2.B=B+1;
3.A=A|B;
问使得A=B的最小操作步数。
题解:
由于第一种操作和第二种操作不可能同时使用,所以要么是A++=B,要么是A++然后或为B,不然就是,用第三种操作使得A>=B,然后B++使得A=B(此时B为B变化后的值)
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10, mod = 1e9 + 7;
typedef long long ll;
int a[N], st[N];
void solve()
{
int x, y;
cin >> x >> y;
int cnt1 = 0, cnt2 = 0, cnt3 = 0;
for (int i = 0; i + x <= y; i++)
{
if (i)cnt1++;
cnt2++;
cnt3++;
if (i + x == y) { cout << cnt1 << endl; break; }
if (((i + x) | y) == y) { cout << cnt2 << endl; break; }
if (((y + i) | x) == (y + i)) { cout << cnt3 << endl; break; }
}
}
int main()
{
int t;
cin >> t;
while (t--)solve();
}