【数学】小武的方程

数学 专栏收录该内容
38 篇文章 0 订阅

题目描述

小武有2个方程,x|y=A,x+y=B,其中|为二进制或符号,x和y是未知数,A和B已知,小武想知道这个 方程是否有非负整数解。

输入格式

第一行一个整数T表示数据组数
接下来T行,每行两个数A和B

输出格式

T行,
若方程有解输出Possible,否则输出Impossible

输入输出样例
输入 #1
4
14 14
2 5
0 9
10 10
输出 #1
Possible
Impossible
Impossible
Possible
说明/提示
数据范围

对于30%的数据,A,B<=1000 对于50%的数据,A,B<=10^9 对于100%的数据,T<=10,0<=A,B<=10^18

样例解释

第一组的一个解为14和0
第二组无解
第三组无解
第四组的一个解为10和0


解题思路

首先思考一下,① B必大于A,因为x和y同一位上都是1的话,A当前位是1,而B则进位了
于是可以得出B - A就是x和y同为1位的和
比如:A = 5(101), B = 6(110), B - A = 1(001), 那么x和y的第0位必为1,其它位没有条件限制
A=2(010), B=5(101), B - A = 3(011), 那么x和y第0位和第1位必为1,但是A的第0位并不是1,所以A,B不成立
判断必为1位是不是1,用② A | (B - A) ,如果求出的依旧是A,那么必为1位是1


#include <iostream>
#include <cstdio>

using namespace std;

long long T, n, m;

int main(){
	scanf ("%lld", &T);
	while (T--)
	{
		scanf ("%lld%lld", &n, &m);
		if ((m >= n) && ((n | (m - n)) == n))//① 和② 
		    printf ("Possible\n");
		   else printf ("Impossible\n");
	}
}
  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值