题目描述:
思路:
自己是从后往前模拟,分类讨论。
大佬们找规律,好像是说如果有解,则 or值和 和值-or值一定能作为答案。
为啥我也不懂。
模拟代码:
#include<iostream>
#include<string.h>
#include<stdio.h>
#include<math.h>
#include<set>
#include<algorithm>
#define LL long long
#define INF 0x3f3f3f3f
using namespace std;
const int N=2e5+100;
const int M=4e5+100;
int arr[N];
int main(){
LL x,y;
while(cin>>x>>y){
bool flag=1;
int pre=0;
for(int i=0;i<=63;i++){
if((y>>i&1)==0){
if(pre==0){
if((x>>i&1)==0){
continue;
}else{
pre=1;
}
}else{
if((x>>i&1)==0){
flag=0;
break;
}else{
continue;
}
}
}else{
if(pre==0){
if((x>>i&1)==0){
flag=0;
break;
}else{
continue;
}
}else{
if((x>>i&1)==0){
pre=0;
}else{
pre=1;
continue;
}
}
}
}
if(flag){
cout<<"Possible"<<endl;
}else{
cout<<"Impossible"<<endl;
}
}
return 0;
}
规律代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
int main()
{
ll x,y;
cin>>x>>y;
ll c=y-x;
if((c|x)==x)
cout<<"Possible"<<endl;
else
cout<<"Impossible"<<endl;
return 0;
}
THE END;