SOJ 4309 Sum of xor 异或/思维

Posted 87hbteo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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\n");
        else printf("0\n");
    }else{
        if(((n+1)/2)%2==1){
            printf("%ld\n",n^1);    
        }else{
            printf("%ld\n",n^0);
        }
    }
}  
  
int main()  
{  
    LL n;  
    while(scanf("%lld",&n)!=EOF){  
        get_ans(n);
    }  
    return 0 ;  
}  

 

以上是关于SOJ 4309 Sum of xor 异或/思维的主要内容,如果未能解决你的问题,请参考以下文章

UVALive8518 Sum of xor sum

B. Dima and a Bad XOR(异或+思维)

Xor Sum 2 AtCoder - 4142 (异或前缀和性质+ 双指针)

HDOJ6955Xor sum(异或前缀和,01字典树)

2021杭州多校6955-xor sum(字典树+异或前缀和)

2021杭州多校6955-xor sum(字典树+异或前缀和)