A.World Fragments I

字符串、签到

题目大意

给定两个二进制数 x,yx,y

每次可以选择 xx 中的一个数位 dd ,并可执行 x=x+dx=x+dx=xdx=x-d

问能否通过任意次以上操作,使得 x=yx=y ,并给出最少次数

解题思路

这两个二进制数可以视为01串

对于 x=0x=0 ,每一位都是0,除非 y=0y=0 ,否则无法达成条件

对于 x0x\ne 0 ,必定有一位上是 11 ,通过题设操作可以转化为任何数,最小次数为这两个数的差的绝对值 xy|x-y|

bitset是一种非常便于处理01串的STL数据结构,合理利用可以省去很多麻烦

参考程序

void solve()
{
    string x,y;
    cin >> x >> y;
    bitset<1000> a(x),b(y);
    ll m,n;
    if(a.none()&&b.any()) {cout << "-1" << endl;return;}
    m=a.to_ullong();
    n=b.to_ullong();
    cout << abs(m-n) << endl;
}