hdu5650 so easy 组合数

探讨了给定整数数组中所有子集的异或运算结果的总和计算问题,通过分析元素出现频率,得出只有当数组长度为1时结果才不为0的结论。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

so easy

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 161    Accepted Submission(s): 130


Problem Description
Given an array with
n
integers, assume  f(S)  as the result of executing xor operation among all the elements of set  S . e.g. if  S={1,2,3}  then  f(S)=0 .

your task is: calculate xor of all  f(s) , here  sS .
 

Input
This problem has multi test cases. First line contains a single integer  T(T20)  which represents the number of test cases.
For each test case, the first line contains a single integer number  n(1n1,000)  that represents the size of the given set. then the following line consists of  n different integer numbers indicate elements( 109 ) of the given set.
 

Output
For each test case, print a single integer as the answer.
 

Sample Input
  
  
1 3 1 2 3
 

Sample Output
  
  
0 In the sample,$S = \{1, 2, 3\}$, subsets of $S$ are: $\varnothing$, {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3}
 

Source


因为偶数个相同的数异或得0,奇数个相同的数异或得自身。

发现一个规律,每个元素在所有子集中出现的次数都一样,而且都是2^(n-1),比如样例

是C(1, 1) + C(2, 1) + C(2, 2) = 2 ^ (3 - 1)

当n = 4的时候再推一推发现为C(1, 1) + C(3, 1) + C(3, 2) +C(3, 3) = 2^(4 - 1) = 8

其实就是个杨辉三角的关系

      1               2 ^ (1 - 1) = 1

    1    1           2^(2 -1) =  2

  1    2    1       2^(3 - 1) = 4

1    3    3   1    2 ^ (4 - 1) = 8

.....................


当n为1的时候,也就是只有一个元素的时候输出自身,其他情况所有元素在所有子集中出现的次数都是偶数,最后异或的结果肯定为0



#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <queue>
#include <stack>

using namespace std;

long long a[1005];

int main()
{
	int T, n;
	scanf("%d", &T);
	while (T--) {
		scanf("%d", &n);
		for (int i = 0; i < n; i++) {
			scanf("%I64d", &a[i]);
		}
		if (n == 1) {
			printf("%I64d\n", a[0]);
		}
		else {
			puts("0");
		}
	}
	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值