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 ;  
    }  
  • 相关阅读:
    Chapter 2 Open Book——14
    数据结构和算法[精选]----说明一下这个分类之后的作用
    Chapter 2 Open Book——13
    Chapter 2 Open Book——12
    myeclipse中打开java文件中文乱码
    div+css与table布局
    docker入门实战笔记
    docker常用命令
    ignite学习笔记
    java代码如何发送QQ邮件
  • 原文地址:https://www.cnblogs.com/87hbteo/p/7631337.html
Copyright © 2011-2022 走看看