zoukankan      html  css  js  c++  java
  • SOJ 4309 Sum of xor 异或/思维

    Source

    ftiasch

    解题思路:

      本题的题解有参考这里,但是那篇年代太久远,讲的也不甚清晰,所以可能会对很多新手造成困扰,所以又写了这一篇。

      亦或有很多规律,本题使用到的是n^(n+1)=1,其中n从0开始。即0^1=1,2^3=1,4^5=1...以此类推。

      所以可以看出,当题目所给的n为奇数的时候,从0开始两两配对,可以正好配成(n+1)/2对(结合律),每一对的异或值都为1(其中可以忽略0的加入的影响,因为0与任何数异或都等于另一个数本身)。这个时候我们只需要数一下有多少个1就好啦!偶数个1会两两异或为0,奇数个则异或为1.

      当题目所给的n为偶数的时候,是在n-1为奇数的前提下增加了一个偶数的n,只需要在原本的基础上,让n与前n-1个数的异或的结果相异或就好啦!

    AC代码:

    #include <stdio.h>
    #include <iostream>
    using namespace std;
    typedef long long LL;  
    
    void get_ans(LL n)  
    {  
        if(n&1) {
            if(((n+1)/2)%2==1)printf("1
    ");
            else printf("0
    ");
        }else{
            if(((n+1)/2)%2==1){
                printf("%ld
    ",n^1);    
            }else{
                printf("%ld
    ",n^0);
            }
        }
    }  
      
    int main()  
    {  
        LL n;  
        while(scanf("%lld",&n)!=EOF){  
            get_ans(n);
        }  
        return 0 ;  
    }  
  • 相关阅读:
    QBoxLayout中setSpacing(int)和addSpacing(int)的区别
    BZOJ1017 树形DP
    树形DP 2415HDU
    树形DP基础题 HDU1520
    最小生成树个数 并查集压缩路径
    伸展树基本概念基本题目
    BZOJ1010单调性DP优化
    BZOJ1009 矩阵快速幂+DP+KMP
    字典树(数组实现)
    poj 1611 The Suspects(并查集输出集合个数)
  • 原文地址:https://www.cnblogs.com/87hbteo/p/7631337.html
Copyright © 2011-2022 走看看