CF1623c Strange Test题解

题解

1.题意

两个数字 $a$ 和 $b$
可以进行如下操作:

  • a=a+1
  • b=b+1
  • a=a|b

问至少要进行多少次操作才能让 $a==b$

2.思路

分类讨论
我们发现最多只会进行一次或操作
是在$a$ 和 $b$ 加玩过后
而且我们发现,只会是只加a或者只加b
于是两种情况取min就行了:

  • 只加a,一直到a|b==b为止
  • 只加b,一直到a|b==b为止

对了,还要统计只加的情况,次数是$b-a$

所有取个min就做完了

3.代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<bits/stdc++.h>
#define int long long
using namespace std;
int t;
void solve(){
int a,b;
cin>>a>>b;
int ans=b-a;
for(int i=a;i<=b;i++)if((b|i)==b)ans=min(ans,i-a+1);
for(int i=b;i<=2*a+b;i++)if((i|a)==i)ans=min(ans,i-b+1);
cout<<ans<<'\n';
}
main(){
cin>>t;
while(t--)solve();
return 0;
}

CF1623c Strange Test题解
https://zxtweb.fun/posts/cnb-19638560/
作者
站长
发布于
2026年2月25日
许可协议