列表

详情


NC235688. 或与异或

描述

给出两个数 ,可以对其进行无限次操作,每次操作可以选择  和  其中一个数作为操作对象,然后将操作对象的值变成以下三种之一,另一个不变:

  。(按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为 。)

  。(按位与运算符“&”是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位都为1时,结果位才为 。)

  。(按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为 。)

对于每组给出的  和  ,给出一个 ,判断是否可以通过操作使得  和  其中之一变成 

输入描述

第一行包含一个整数  ,表示  组询问。

接下来  行,每行包含三个整数 

输出描述

输出包含  行,对于每个询问,如果  和  能通过操作得到 , 输出YES,否则输出NO

示例1

输入:

3
1 2 3
3 2 4
3 5 3

输出:

YES
NO
YES

说明:

,输出 YES

对于  ,不存在任意操作组合可以使得其中之一变成 ,输出 NO
无需操作,初始时 a=target,输出 YES

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

pypy3 解法, 执行用时: 438ms, 内存消耗: 28296K, 提交时间: 2022-04-22 20:08:14

for _ in range(int(input())):
    a, b, t = list(map(int, input().split(' ')))
    s  = set([a, b])
    for _ in range(5):
        news = set()
        for x in s:
            news.add(x)
        for x in s:
            for y in s:
                if x != y:
                    news.add(x^y)
                    news.add(x|y)
                    news.add(x&y)
        s = news
    if t in s:
        print('YES')
    else:
        print('NO')

C 解法, 执行用时: 9ms, 内存消耗: 344K, 提交时间: 2022-04-22 20:41:12

#include <stdio.h>

int main() {
    int T;
    long long  a,b,t,p;
    int flag;
    scanf("%d",&T);
    for(int i=1;i<=T;i++){
        scanf("%lld %lld %lld",&a,&b,&t);
        flag=0;
        p=a&b;
        if(t==a||t==b||t==p||t==0)
            flag=1;
        if(t==(a^b)||t==(b^p)||t==(a^p)||t==(a^p^b))
            flag=1;
        if(flag==1)
            printf("YES\n");
        else
            printf("NO\n");
    }
    return 0;
}

Python3 解法, 执行用时: 168ms, 内存消耗: 4672K, 提交时间: 2023-07-13 17:29:05

def slove():
    a,b,t=list(map(int,input().split() ))
               
    if t in [a,b,a|b,a&b,a^b,a&(a^b),b&(a^b),a|(a^b),b|(a^b),0,a^(a&b),\
             b^(a&b),a^(a|b),b^(a|b),0]:
        print('YES')
        return 
    print('NO')
    return 

if __name__=='__main__':
    t=int(input())
    for _ in range(t):
        slove()

C++ 解法, 执行用时: 44ms, 内存消耗: 524K, 提交时间: 2022-07-24 21:03:35

#include<iostream>
#define MAX 1010
using namespace std;
int main(){
	long long t,a,b,tar;
	cin>>t;
	while (t--){
		cin>>a>>b>>tar;
		if(tar==0||tar==a||tar==b||tar==(a&b)||tar==(a|b)||tar==(a^b)||tar==((a^b)&a)||tar==((a^b)&b)) cout<<"YES"<<endl;
		else cout<<"NO"<<endl;
	}
	return 0;
} 

上一题