zoukankan      html  css  js  c++  java
  • 2015.12 杭电校赛 Bitwise Equations

    http://acm.hdu.edu.cn/contests/contest_showproblem.php?cid=657&pid=1005

    题意:给你一个X,一个K,求第K个小的Y使他满足 X|Y=X+Y;

    解法:此题可由打表找规律;找到的规律是,当原数的1全部变成0,其余的零 所排列组合的 出的数都是可行的解,所以,k的值就是那些零排列组合成的值,所以

    把原数里的1变成0,只把 k插入进去。

    AC代码:

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <algorithm>
     4 #include <math.h>
     5 using namespace std;
     6 int main()
     7 {
     8     int T,a[150],b[150],x,k;
     9     scanf("%d",&T);
    10     while(T--)
    11     {
    12         scanf("%d%d",&x,&k);
    13         int a1=0;
    14         int b1=0;
    15         while(x)//转换成二进制
    16         {
    17             a[a1++]=x%2;
    18             x/=2;
    19         }
    20         while(k)//转换成二进制
    21         {
    22             b[b1++]=k%2;
    23             k/=2;
    24         }
    25         int c1=0;
    26         for(int i=0;i<a1;i++)//将k插入进去
    27         {
    28             if(a[i]==0&&c1<b1)
    29             {
    30                 a[i]=b[c1++];
    31             }
    32             else if(a[i]==1)
    33             {
    34                 a[i]=0;
    35             }
    36         }
    37         while(c1<b1)//如果k比x大的话就需要这步
    38         {
    39             a[a1++]=b[c1++];
    40         }
    41         long long int sum=1;
    42         long long int s=0;
    43         for(int i=0;i<a1;i++)//将二进制转换成十进制
    44         {
    45             s+=sum*a[i];
    46             sum*=2;
    47         }
    48         printf("%lld
    ",s);
    49     }
    50     return 0;
    51 }
  • 相关阅读:
    esper(4-5)- Context 条件
    esper(4-4)-OverLapping Context
    esper(4-3)-Non-Overlapping Context
    esper(4-2)-Category Context
    esper(4-1)-简单context
    esper(3)-窗口&聚合分组
    esper(2)-事件类型
    java常用代码
    idea(3)-jetty配置
    BP(反向传播)算法原理及推导
  • 原文地址:https://www.cnblogs.com/qioalu/p/5079035.html
Copyright © 2011-2022 走看看