zoukankan      html  css  js  c++  java
  • 洛谷 U140112 Seawayson的趣味题

    洛谷 U140112 Seawayson的趣味题

    洛谷传送门

    题目背景

    SeawaySeawa**y博士是MT(我叫MT,一款游戏)领域的知名专家,他的儿子名叫SeawaysonSeawayson。现在,刚刚放学回家的SeawaysonSeawayson正在思考一个有趣的问题。

    题目描述

    今天在信息学课堂上,老师讲解了关于进制的知识。老师向他们介绍了二进制以及二进制的一些常用运算。卷帙浩繁中,SeawaysonSeawayson对0101串、按位与、按位或等操作情有独钟。现在SeawaysonSeawayson认为自己已经熟练地掌握了这些知识,他开始思考一些更加有趣的问题。这个问题被他命名为“最小异或和”问题。这个问题是这样的:SeawaysonSeawayson先给定两个整数A,BA,B,他想要找到两个满足条件的整数x,yx,y,满足x,yx,y是A,BA,B的“最小异或和”。在本题中,“最小异或和”按如下方式定义:

    对于整数P,QP,Q及两个整数M,NM,N。若满足P=M+N,Q=M xor NP=M+N,Q=M xor N。且MM是所有满足条件的整数中最小的,则称M,NM,N为P,QP,Q的最小异或和。

    SeawaysonSeawayson在稍加思索后,他发现这样的解可能不存在。因此他请你帮助他编程求解这个问题。

    输入格式

    从文件seawayson.inseawayson.i**n中读入数据。

    第一行一个整数TT,表示测试数据组数。

    每组数据包括一行两个整数A,BA,B。意义如题目描述所示。

    输出格式

    输出到文件seawayson.outseawayson.out中。

    对于每组数据:

    若有解,输出两个用空格分开的整数x,yx,y;若无解,输出I love SeawayI lov**e Seawa**y。每组数据间换行。


    命题背景:

    如果严格按难度排,这题应该放T1。但是我就是觉得这个玩意比大模拟要难一些。而且大模拟还要留着搞选手心态呢所以放了T2。


    题解:

    感觉思维难度的确是有的。

    挺有含金量的?我觉得可以评绿。

    但是其实推推性质也没啥。

    可以看出,^就是不进位加法。

    那么它和加法之间会有很多地方相像。具体地,按位来讲,如果两个都是0或者一1一0,加法和异或都是一样的。如果两个都是1的话,那么就会出现加法进位异或变0的情况。

    如果这一位为第p位,那么加法就比异或多了(2^{p+1})这么多的数。

    所以要求最小的x,其实只需要满足这些都是1的位都是1,其他都是0即可。

    其解即为((A-B)/2)

    注意特判无解情况和开unsigned longlong

    代码:

    #include<cstdio>
    #define ull unsigned long long
    using namespace std;
    ull a,b;
    ull ansx,ansy;
    int main()
    {
    	scanf("%llu%llu",&a,&b);
    	if(a<b)
    	{
    		puts("-1");
    		return 0;
    	}
    	if((a-b)&1)
    	{
    		puts("-1");
    		return 0;
    	}
    	ansx=(a-b)>>1ull;
    	ansy=a-ansx;
    	printf("%llu %llu
    ",ansx,ansy);
    	return 0;
    }
    

  • 相关阅读:
    codevs2574 波兰表达式
    绿书模拟day10 单词前缀
    codevs2171 棋盘覆盖
    noip2008 双栈排序
    图论总结复习
    noip2010 关押罪犯
    flask使用geventwebsocket完成小型聊天系统
    MongoDB
    flask基础内容总览
    flask蓝图,cbv,python中的redis操作
  • 原文地址:https://www.cnblogs.com/fusiwei/p/13960554.html
Copyright © 2011-2022 走看看