本文主要是介绍Codeforces Round#769(Div.2) C. Strange Test,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题意
给定两个数,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();
}
这篇关于Codeforces Round#769(Div.2) C. Strange Test的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!