zoukankan      html  css  js  c++  java
  • Codeforces Round #628 (Div. 2) D. Ehab the Xorcist(异或,思维题)

    题意:

    寻找异或后值为 u,相加后和为 v 的最短数组。

    思路:

    异或得 u ,则 v 至少应大于等于 u ,且多出来的部分可以等分为两份相消。

    即初始数组为 u , (v-u)/2 , (v-u)/2,之后即为特判或判断是否可以合并。

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    
    int main()
    {    
        ll u,v;cin>>u>>v;
    
        ll a=(v-u)/2;
    
        if(v<u||(v-u)%2)
            cout<<"-1";
        else if(u==0)
            cout<<"0";
        else if((u+a+a)==u)
            cout<<"1"<<'
    '<<u;
        else if(((u+a)^a)==u)//不会有(u^(a+a))==u,因为此时a+a!=0
            cout<<"2"<<'
    '<<u+a<<' '<<a;
        else
            cout<<"3"<<'
    '<<u<<' '<<a<<' '<<a;
        
        return 0;
    }
  • 相关阅读:
    A+B Problem
    迭代平方根
    猴子报数
    分数求和
    猴子吃桃
    钻石
    杨辉三角形
    MYSQL 5.7 修改密码、登录问题
    SQL 语句 explain 分析
    重构CMDB,避免运维之耻
  • 原文地址:https://www.cnblogs.com/Kanoon/p/12495687.html
Copyright © 2011-2022 走看看