zoukankan      html  css  js  c++  java
  • CF1421A XORwice

    题意

    给定 (a)(b) ,找到一个 (x) 使得 ((aoplus x)+(boplus x)) 的值最小,输出这个值

    Solution

    考场想法

    因为这个 (x) 要和两个数进行异或,所以要找一个合适的值。好像又是废话

    因为 (tleq 10^4) ,所以不能进行枚举等非 (O(1)) 操作。

    观察样例,发现最后一组的答案为 (0) ,恰好是 (1oplus 1) 的值。

    这时就可以有一个大胆的想法,是不是答案就是给出的 (a,b) 异或之值。

    将样例进行验证,发现是对的。

    完结撒花

    蒟蒻认为的正确做法

    因为异或也是按位运算,所以考虑对某一位进行考虑,然后扩展到所有位上。

    如果 (a)(b) 的某一相同位上一个是 (0) ,一个是 (1) ,那么 (x) 那一位上不管是什么,异或完还是一个 (0) 和一个 (1) 。也就是相加永远为 (1) ,所以不用管。

    如果 (a)(b) 的某一相同位上均为 (1)(0) ,那么 (x) 那一位只要对应为 (1)(0) 就可保证异或完相加为 (0)

    现在总结一下,就是: (a,b) 某一位相同,则答案对应的那一位为 (0)(a,b) 某一位不同,则答案对应的那一位为 (1)

    我艸,这不就是异或运算吗!

    是的,这和我第一个做法最后的结论相同,输出 (aoplus b) 即可。

    代码

    #include<bits/stdc++.h>
    
    using namespace std;
    
    int main(){
    	int a,b,T;
    	scanf("%d",&T); 
    	while(T--){
    		scanf("%d%d",&a,&b);
    		printf("%d
    ",(a^b));
    	}
    } 
    
  • 相关阅读:
    家庭记账本_2
    家庭记账本_1
    安卓学习进度_25
    安卓软件学习进度_24
    对体温上报app的总结
    安卓软件学习进度_23
    安卓软件学习进度_22
    安卓开发
    安卓开发
    安卓开发
  • 原文地址:https://www.cnblogs.com/jasony/p/13843269.html
Copyright © 2011-2022 走看看