2023牛客暑期多校训练营3

A: World Fragments I

题意:给定两个数字的二进制表示,每次可以用x减去本身的一个1或者0,直到x变成y最少多少步,可知只要x大于0其中必定存在1,也就是 x可以转化为y,求|x - y|即可

#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef long long ll;
typedef pair<int,int> PII;
const int N = 100010;

int ptt(string s,int p){
	int x = 0;
	for(int i = 0; i < s.size(); i ++){
		x *= p;
		if(s[i] >= 'A' && s[i] <= 'Z') x += (s[i] - 'A' + 10);
		else x += (s[i] - '0');
	}
	return x;
}

void solve(){
	string s1,s2;
	cin >> s1 >> s2;
	if(s1 == s2){
		cout << 0;
		return;
	}
	if(s1 == "0"){
		cout << -1;
		return;
	}
	int a = ptt(s1,2),b = ptt(s2,2);
	cout << abs(a - b);
}
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	solve();	
	return 0;
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务