• BZOJ3687 简单题 【bitset】


    BZOJ3687 简单题


    Description

    小呆开始研究集合论了,他提出了关于一个数集四个问题:
    1.子集的异或和的算术和。
    2.子集的异或和的异或和。
    3.子集的算术和的算术和。
    4.子集的算术和的异或和。
    目前为止,小呆已经解决了前三个问题,还剩下最后一个问题还没有解决,他决定把
    这个问题交给你,未来的集训队队员来实现。

    Input

    第一行,一个整数n。
    第二行,n个正整数,表示01,a2….,。

    Output

    一行,包含一个整数,表示所有子集和的异或和。

    Sample Input

    2
    1 3

    Sample Output

    6

    HINT

    【样例解释】

    6=1 异或 3 异或 (1+3)

    【数据规模与约定】

    ai>01<n<1000ai2000000


    我们发现在异或情况下,对于一个相同的数,出现奇数次为0,出现偶数次是原数,所以我们只需要统计一个数出现了奇数次还是偶数次,定义bitset第k位代表和为k的方案数是奇数还是偶数,我们发现,当新加入一个数t,新增相当于将bitset向右移动t位,再异或上原集就是当前集合,最后跑一遍判断每个数是否存在奇数次,是就在答案上异或


    #include<bits/stdc++.h>
    using namespace std;
    #define N 2000010
    bitset<N> s;
    int ans=0,sum=0;
    int main(){
        int n;scanf("%d",&n);
        s[0]=1;
        for(int i=1;i<=n;i++){
            int x;scanf("%d",&x);
            s^=(s<<x);
            sum+=x;
        }
        for(int i=1;i<=sum;i++)if(s[i])ans^=i;
        printf("%d",ans);
        return 0;
    } 
  • 相关阅读:
    寒假学习24idea连接mongo
    安装破解project
    寒假学习19FileZilla连接centos7失败处理(SSH)
    寒假学习22IDEA Junit4配置
    寒假学习25javaswing 入门介绍
    寒假学习20VS Code中格式化插件PrettierCode Formatter保姆级设置
    空3
    7
    kafka集群搭建及启动脚本
    空6
  • 原文地址:https://www.cnblogs.com/dream-maker-yk/p/9676363.html
Copyright © 2020-2023  润新知