题目链接
题意:给你两个二进制字符串,a,b,和待求值 k 问你怎样使a + b * 2 ^ k的反向后的字典序最小。
对于普通的二进制加法,要使反向后的字符串字典序最小,一定是加完之后的末尾0的数量最多,对于 b * 2 ^ k操作其实质是在b字符串后面添加k个0,所以只需要计算在b后添加几个0可以使b字符串最后一个1与a字符串最后一个1对齐,添加0的数量即b向右移位的次数就是k的最小值
#include<bits/stdc++.h>
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
string a,b;
cin>>a>>b;
int px;
for(int i=b.size()-1;i>=0;i--){
if(b[i]=='1'){
px=i;
break;
}
}
px+=(a.size()-b.size());
int ans=0;
for(int i=px;i>=0;i--){
if(a[i]=='1'){
break;
}
ans++;
}
cout<<ans<<endl;
}
return 0;
}