zoukankan      html  css  js  c++  java
  • D. Ehab the Xorcist

    题意: 略;

    感觉被演了一波,这是CFdiv2吗?

    算是这个构造题吧。

    1 首先我们可以将u进行二进制拆分来考虑。加入u>v那么小与v的那些数在怎么拼接也无法使异或值为u。

    比如二进制U=1 0 1 1 0。怎么才能异或成这个数呢?无非就是让1所在的位置的1的个数为奇数就行了,也就是构成异或成U的最小值为1000+100+10。如果大于v的话是不可能构成U的。

    2 v>u&&(v-u)&1。这样的话最后一位置会多出来一个1,会改变异或值的奇偶性,与u相反,所以也是不可能的。

    3 v==u&&v=0 :略。

    4 v==u&&v!=0:   略。

    5 构造 :

      u+x+x=v。u^x^x==u。

    所以x=(v-u)/2。

    u,(v-u)/2,(v-u)/2。

    将u和(v-u)/2合并一下,如果满足条件,那么可以优化为 (v+u)/2,(v-u)/2。

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    void solve()
    {
        ll u,v;
        cin>>u>>v;
        if(u>v||(v-u)&1) {
            cout<<-1<<endl;
            return ;
        }
        if(u==v&&u==0) {
            cout<<0<<endl;
            return ;
        }
        if(u==v&&u!=0){
            cout<<1<<endl;
            cout<<v<<endl;
            return ;
        }
        ll c=(u+v)/2;
        ll b=(v-u)/2;
        if((c^b)==u){
            cout<<2<<endl;
            cout<<b<<" "<<c<<endl;
        }
        else {
            cout<<3<<endl;
            cout<<u<<" "<<b<<" "<<b<<endl;
        }
    }
    
    
    int  main()
    {
        solve();
        
        return 0;
    }

    (吐槽:觉得是D题,没敢想的这么简单.....)

  • 相关阅读:
    Google基本利用
    sqlmap
    kali中wireshark打开后错误
    Python Flask Jinja2模板引擎
    Python Flask学习
    Python 豆瓣日记爬取
    Python 函数装饰器
    Python 生成器
    ss源码学习--从协议建立到完成一次代理请求
    ss源码学习--工作流程
  • 原文地址:https://www.cnblogs.com/Accepting/p/12512932.html
Copyright © 2011-2022 走看看