Sequence [组合数学]

时间限制: 3 Sec  内存限制: 128 MB 提交: 138  解决: 52 [提交][状态][讨论版]

题目描述

在某个夜黑高的晚上,!!!,原谅我编不下去了

HS(Handsome)的Ocean在纸上写下$N$个整数,Ocean把它定义为$O$序列。

Ocean认为一个序列的价值的是:序列中不同元素个数。

现在他想知道$O$序列中所有子序列的价值之和

比如说:序列$(1, 1, 2, 2)$价值为$2$,因为序列中有$1$和$2$两个不同元素。 比如序列$(1, 1, 1)$,共有$7$个子序列,$(1)、(1)、(1)、(1, 1)、(1, 1)、(1, 1)、(1, 1, 1)。$价值之和为$7$。

输入

第一行输入一个整数$T$,代表有$T$组测试数据。 每组数据占两行,第一行输入一个整数$N$,代表序列元素个数。 接下来一行输入$N$个整数$a_i$。
注:$1 <= T <= 10000,1 <= N <= 50,1 <= a_i <= 10。$

输出

对每组测试数据,输出一个结果代表所有子序列价值之和。由于结果会很大,请用$long\,long$(%lld)。

样例输入

4
3
1 1 1
4
1 1 1 1
4
10 10 10 8
20
1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10

样例输出

7
15
22
7864320

来源

CZY

思路:每个元素提供的价值是2^k - 1,k是这个元素出现的次数;那么我们根据元素值来解决问题,假设我们选的是5和7,

现在有一组 5 5 5 7 7 7 7,那么选的这两个数提供的价值就是V5 * V7;

那么我们现在只需要找出元素值的全排列的选择即可,这个可以用位运算;

代码:(注意java里面跟c有点不一样,要想是java形式,要是1L<<k)

import java.util.Scanner;

public class hpu1192 {
static private Scanner cin;
static{
cin = new Scanner(System.in);
}
public static void main(String[] args) {
// System.out.println((long)(1L << 50));
int T, N, temp;
int[] a = new int[11];
T = cin.nextInt();
while(T-- > 0){
N = cin.nextInt();
for(int i = 0; i <= 10; i++){
a[i] = 0;
}
for(int i = 0; i < N; i++){
temp = cin.nextInt();
a[temp]++;
}
long ans = 0;
for(int i = 1; i < (1 << 10); i++){
int cnt = 0;
long sum = 1;
for(int j = 0; j < 10; j++){
if((i & (1 << j)) != 0){
cnt++;
sum *= (long)((1L << a[j + 1]) - 1);
}
}
ans += (long)sum * cnt;
}
System.out.println(ans);
}
}
}

Sequence(组合数学,集合不同元素的个数)的更多相关文章

  1. hdu 1856 求集合里元素的个数 输出最大的个数是多少

    求集合里元素的个数 输出最大的个数是多少 Sample Input41 23 45 61 641 23 45 67 8 Sample Output42 # include <iostream&g ...

  2. 定义一个Collection接口类型的变量,引用一个Set集合的实现类,实现添加单个元素, 添加另一个集合,删除元素,判断集合中是否包含一个元素, 判断是否为空,清除集合, 返回集合里元素的个数等常用操作。

    package com.lanxi.demo2; import java.util.HashSet; import java.util.Iterator; import java.util.Set; ...

  3. poj 1611 求0号结点所在集合的元素个数

    求0号结点所在集合的元素个数 Sample Input 100 42 1 25 10 13 11 12 142 0 12 99 2200 21 55 1 2 3 4 51 00 0Sample Out ...

  4. MT【215】集合中元素个数

    设$M=\{1,2,3\cdots,2010\}$,$A$是$M$的子集且满足条件:当$x\in A$时$15x\notin A$,则$A$中的元素的个数最多是______ 分析:由于$x,15x,( ...

  5. 萌新笔记——Cardinality Estimation算法学习(一)(了解基数计算的基本概念及回顾求字符串中不重复元素的个数的问题)

    最近在菜鸟教程上自学redis.看到Redis HyperLogLog的时候,对"基数"以及其它一些没接触过(或者是忘了)的东西产生了好奇. 于是就去搜了"HyperLo ...

  6. JAVA生成一个二维数组,使中间元素不与相邻的9个元素相等,并限制每一个元素的个数

    JAVA生成一个二维数组,使中间元素不与相邻的9个元素相等,并限制每一个元素的个数 示例如下 至少需要九个元素:"A","B","C",&q ...

  7. 使用 CSS 根据兄弟元素的个数来调整样式

    在某些场景下,我们需要根据兄弟元素的总数来为它们设置样式.最常见的场景就是,当一个列表不断延长时,通过隐藏控件或压缩控件等方式来节省屏幕空间,以此提升用户体验. 为保证一屏内容能展示更多的内容,需要将 ...

  8. Cardinality Estimation算法学习(一)(了解基数计算的基本概念及回顾求字符串中不重复元素的个数的问题)

    最近在菜鸟教程上自学redis.看到Redis HyperLogLog的时候,对“基数”以及其它一些没接触过(或者是忘了)的东西产生了好奇. 于是就去搜了“HyperLogLog”,从而引出了Card ...

  9. 遍历List集合删除元素的出现报错

    遍历List集合删除元素的出现报错   遍历List集合删除元素的时候会发生索引越界异常或内容遍历不全等问题. 例子: List<String> al = new ArrayList< ...

随机推荐

  1. 使用多线程完成Socket

    public class Service { //服务器 public static void main(String[] args) { ServerSocket serverSocket=null ...

  2. ASP.NET-FineUI开发实践-8

    上回模拟的是下拉grid,这回我把下拉grid和表格自动补全放一起了,实在是好做,但是也有很多要注意的,现在分享下,大家学习. 接上回 传送门  1. 有个tbxMyBox1_TriggerClick ...

  3. 用CSS边框图像让你的网站更漂亮

    不久之前,添加一些装饰性元素,例如给网页中的图片添加花哨的边,以及耐心调整CSS文件才能使你的网页看起来不错.然而现在CSS已经做出了改变,用复杂的边框装饰你的网站只需几行代码.这篇文章将告诉你如何做 ...

  4. Xml序列化自引用/循环引用问题1

    1.定义类 public class Student { public int ID { get; set; } public string Name { get; set; } //[XmlIgno ...

  5. BetWeen和模糊查询

    --区分大小写性能比较低select * from Students where Age >1 and Age <4select * from Students where Age bet ...

  6. 在浏览器中打不开Oracle 11gR2的企业管理器页面

    最简单的办法,重建EM 四个步骤: emca -repos drop emca -repos create emca -config dbcontrol db emctl start dbconsol ...

  7. Linux下安装Oracle 10g(redhat 4)

    --注:本篇文章只装Oracle,并没有建库 一:在虚拟机里装个readhat 4系统 二:配IP 配好之后的IP如下: 三:建用户组,用户 注意:oracle用户应具有相同的uid. groupad ...

  8. 告诉你GetDC()没有释放造成的后果

    最近做的项目中需要显示视频监控窗口,从采集卡中读到图像的数据,需要实时显示出来,而且速度比较快. 由于比较简单,就直接使用了GDI画图,以前复杂的都用openGL啥的工具了,这次这个简单,就直接用GD ...

  9. cos实现文件上传--推荐

    1.导包 2.核心类:MultipartRequest MultipartRequest是request的包装类 参数1:request 参数2:保存路径 参数3:上传文件大小,默认为1M 参数4:编 ...

  10. C++拾遗(十)类与动态内存分配(2)

    静态成员函数 声明时包含关键字static.注意以下两点: 1.使用静态成员函数时不能通过对象或者this指针来调用,只能使用类名+作用域解析符来调用. 2.静态成员函数只能使用静态成员. new操作 ...