题目链接:
https://codeforces.com/contest/1632/problem/C
题目概述
大意就是说题目给出两个数a和b(a
输入输出格式
样例
输入
5 1 3 5 8 2 5 3 19 56678 164422
输出
1 3 2 1 23329
解释
题目本身叙述很简单,意思不难理解,就是如何最短路径使得a等于b。解题关键在于我们要想清楚,每当我们采取 a=a|b 操作时,a必定大于等于b了。但这并不代表按位或操作只能在最后一步实现。因此还有个重要的点需要我们想到:先进行a++或者b++操作效率相对更高,因为你若先执行按位或的操作,你势必要进行额外的更多的b++来弥补ab差距。代码并没有什么难的地方,主要注重于这段思考。
代码(个人答案)
#includeusing namespace std; int main(){ ios::sync_with_stdio(0); cin.tie(0); int t;cin>>t; while(t--){ int a,b; cin>>a>>b; int ans=1e9; for(int i=0;i<=b;i++) if((i|b)==b) ans=min(ans,abs(a-i)+(i!=b)); cout< 值得注意的是,样例的第二个正好对应于代码的特殊情况 i=b。



