zoukankan      html  css  js  c++  java
  • hdu 4759 Poker Shuffle 二进制

    思路:主要是二进制的运用。

    为了方便从0开始,首先看下右移一下,高位异或1的规律:(可以从右往左一列一列看)

    000(0) -> 100(4) -> 110(6) -> 111(7) -> 011(3) -> 001(1) -> 000(0)

    001(1) -> 000(0) -> 100(4) -> 110(6) -> 111(7) -> 011(3) -> 001(1)

    010(2) -> 101(5) -> 010(2) -> 101(5) -> 010(2) -> 101(5) -> 010(2)

    011(3) -> 001(1) -> 000(0) -> 100(4) -> 110(6) -> 111(7) -> 011(3)

    100(4) -> 110(6) -> 111(7) -> 011(3) -> 001(1) -> 000(0) -> 100(4)

    101(5) -> 010(2) -> 101(5) -> 010(2) -> 101(5) -> 010(2) -> 101(5)

    110(6) -> 111(7) -> 011(3) -> 001(1) -> 000(0) -> 100(4) -> 110(6)

    111(7) -> 011(3) -> 001(1) -> 000(0) -> 100(4) -> 110(6) -> 111(7)

    每次洗牌的时候,奇数在后偶数在前时,只需右移一下;奇数在前偶数在后时,只需右移一下,高位亦或1.

    而且每层的任意2个数异或的结果相同。

    对于给定的n,a,b,x,y;只需判断a^b==x^y(此处是异或运算符)既可。

    代码如下:

     1 import java.math.*;
     2 import java.util.*;
     3 public class Main {
     4     public static void main(String arg[]){
     5         BigInteger a,b,c,x,y;
     6         Scanner cin=new Scanner(System.in);
     7         int t=1,n,tt;
     8         c=BigInteger.ONE;
     9         tt=cin.nextInt();
    10         while(tt-->0){
    11             n=cin.nextInt();
    12             a=cin.nextBigInteger();a=a.subtract(c);
    13             x=cin.nextBigInteger();x=x.subtract(c);
    14             b=cin.nextBigInteger();b=b.subtract(c);
    15             y=cin.nextBigInteger();y=y.subtract(c);
    16             a=a.xor(b);
    17             x=x.xor(y);
    18             boolean flag=false;
    19             for(int i=0;i<n;i++){
    20                 if(a.equals(x)){
    21                     flag=true;
    22                     break;
    23                 }
    24                 if(a.testBit(0)){
    25                     a=a.shiftRight(1);
    26                     a=a.setBit(n-1);
    27                 }else a=a.shiftRight(1);
    28             }
    29             if(flag) System.out.println("Case "+t+": Yes");
    30             else System.out.println("Case "+t+": No");
    31             t++;
    32         }
    33     }
    34 }
    View Code
  • 相关阅读:
    「SDOI2014」向量集 解题报告
    HNOI 2014 世界树
    LOJ #2205. 「HNOI2014」画框 解题报告
    KM模板
    洛谷 [HNOI2014]道路堵塞 解题报告
    [AHOI2014/JSOI2014] 解题报告
    AndroidStudio中添加依赖的三种方式以及如何引入so文件和arr文件
    android 四大组件详解
    Android—— ListView 的简单用法及定制ListView界面
    Android Studio 使用VCS版本控制
  • 原文地址:https://www.cnblogs.com/xin-hua/p/3348330.html
Copyright © 2011-2022 走看看