您的位置:首页 > 文旅 > 旅游 > 今日重庆最新疫情_传奇开服网_西安竞价托管公司_免费b站网页推广

今日重庆最新疫情_传奇开服网_西安竞价托管公司_免费b站网页推广

2025/4/16 23:26:29 来源:https://blog.csdn.net/2401_87294509/article/details/147010608  浏览:    关键词:今日重庆最新疫情_传奇开服网_西安竞价托管公司_免费b站网页推广
今日重庆最新疫情_传奇开服网_西安竞价托管公司_免费b站网页推广

题意:给两个数,问你存不存在k使n+m==n异或m

思路:

为了让n+m==n异或m成功,很明显有两个数在同一位上最多只能有1个1。因为如果有两个就会导致数字变小,很明显n==m是不可能成功的,因为你怎么搞都会有至少一个一模一样的1,所以n==m,答案是-1

其余的让最大值构造成100000……,另外一个数因为小于这个数,所以一定构造不成一样。

代码:

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
const int N = 1e6+10;
const int INF = 1e12;
const int MOD = 998244353;void solve(){int n,m;cin >> n >> m;if(n!=m){cout << (1ll<<30)-max(n,m) << endl;}else cout << -1 << endl;
}signed main() {IOS;int t = 1;cin >> t;while (t--) {solve();}}

反思:真的有被坑到,还是太打开思路了,构造十分简单结果想不到,反思啊反思,对于问题的转化还不够透彻

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com