本文共 689 字,大约阅读时间需要 2 分钟。
1.现有一个有n个元素的序列a=[a1,a2,⋯,an],定义这个序列的价值为。空序列的价值为0.先给你一个长度为n的序列a,求a中所有子集价值的异或和,要求子集中元素的相对位置保持不变。
异或和: 位运算的一种。如果a、b两个值不相同,则异或结果为1;如果a、b两个值相同,异或结果为0。输入输出格式
输入 第一行一个整数 n 接下来一行有n个非负整数表示 a1,a2,⋯ ,an 输出 一个整数表示所有子集的异或和 样例1 输入 2 1 2 输出 6 数据规模 1≤n≤20 1≤a≤10^5 提示 样例1中共有四个子集 [],[1],[2],[1,2], 他们的价值分别为0,1,2,5,其异或和 0⨁1⨁2⨁5=6 解释一下异或和: 首先第一个子集价值是0,0和其它3个子集价值异或后得1,加起来就是3,然后1和其它2个子集异或后结果也是1,加起来得2,最后2和5异或得1,故异或和0⨁1⨁2⨁5=6#include//n<=20using namespace std;int b[100];//定义一个数组,用来存储子集价值int value=0;bool list[20];template int Subset(T *array,int m,int n)//n代表元素个数{ int j=0,sum=0; if(m>=0&&m >n; for(int i=0;i >a[i]; } cout< <
转载地址:http://ufwzi.baihongyu.com/