Sequence(组合数学,集合不同元素的个数)
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$。
输入
注:$1 <= T <= 10000,1 <= N <= 50,1 <= a_i <= 10。$
输出
样例输入
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
来源
思路:每个元素提供的价值是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(组合数学,集合不同元素的个数)的更多相关文章
- hdu 1856 求集合里元素的个数 输出最大的个数是多少
求集合里元素的个数 输出最大的个数是多少 Sample Input41 23 45 61 641 23 45 67 8 Sample Output42 # include <iostream&g ...
- 定义一个Collection接口类型的变量,引用一个Set集合的实现类,实现添加单个元素, 添加另一个集合,删除元素,判断集合中是否包含一个元素, 判断是否为空,清除集合, 返回集合里元素的个数等常用操作。
package com.lanxi.demo2; import java.util.HashSet; import java.util.Iterator; import java.util.Set; ...
- 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 ...
- MT【215】集合中元素个数
设$M=\{1,2,3\cdots,2010\}$,$A$是$M$的子集且满足条件:当$x\in A$时$15x\notin A$,则$A$中的元素的个数最多是______ 分析:由于$x,15x,( ...
- 萌新笔记——Cardinality Estimation算法学习(一)(了解基数计算的基本概念及回顾求字符串中不重复元素的个数的问题)
最近在菜鸟教程上自学redis.看到Redis HyperLogLog的时候,对"基数"以及其它一些没接触过(或者是忘了)的东西产生了好奇. 于是就去搜了"HyperLo ...
- JAVA生成一个二维数组,使中间元素不与相邻的9个元素相等,并限制每一个元素的个数
JAVA生成一个二维数组,使中间元素不与相邻的9个元素相等,并限制每一个元素的个数 示例如下 至少需要九个元素:"A","B","C",&q ...
- 使用 CSS 根据兄弟元素的个数来调整样式
在某些场景下,我们需要根据兄弟元素的总数来为它们设置样式.最常见的场景就是,当一个列表不断延长时,通过隐藏控件或压缩控件等方式来节省屏幕空间,以此提升用户体验. 为保证一屏内容能展示更多的内容,需要将 ...
- Cardinality Estimation算法学习(一)(了解基数计算的基本概念及回顾求字符串中不重复元素的个数的问题)
最近在菜鸟教程上自学redis.看到Redis HyperLogLog的时候,对“基数”以及其它一些没接触过(或者是忘了)的东西产生了好奇. 于是就去搜了“HyperLogLog”,从而引出了Card ...
- 遍历List集合删除元素的出现报错
遍历List集合删除元素的出现报错 遍历List集合删除元素的时候会发生索引越界异常或内容遍历不全等问题. 例子: List<String> al = new ArrayList< ...
随机推荐
- C#中MD5加密
C#中进行MD5加密需要使用MD5这个类,这个类位于System.Security.Cryptography命名空间. 转到元数据得知MD5是抽象类和两个静态方法 上代码详解: //得到其静态方法创建 ...
- javascript基础之javascript的存在形式和js代码块在页面中的存放位置
1.存在形式 文件 如: <script src='js/jc.js'></script> 前页面 <script type='text/javascript'>a ...
- java实现字符串反转(原作有点错误,需要看下评论)
http://blog.csdn.net/shenshen123jun/article/details/9104025
- C++拾遗(六)函数相关(1)
返回值 C++规定返回值不能是 数组.但可以是其它任何类型(包括结构体和对象). 通常,函数将返回值复制到指定的CPU寄存器或内存单元中,然后调用函数调用该内存单元的值. 函数原型 参数列表中可以不包 ...
- 你好,C++(21)只要天还没黑,就一直在工地干活-4.3.1 while循环:只要…就一直…
4.3 循环控制语句 在现实世界中,有这样一类现象: 只要油箱中的当前油量小于油箱容量100升,就一直往油箱中加油: 一直不断地为祖国辛勤工作,只要我还活着: 公司100000位员工,每个人的工资都 ...
- js获取上传的文件名
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...
- PHPCMS V9网站更换域名的方法
网站在发展的过程中,很可能多次的修改域名.那么在phpcms v9中我们要怎么进行设置呢? 请进行以下步骤的修改: 1.修改/caches/configs/system.php里面所有和域名有关的,把 ...
- CentOS下安装nginx并且升级nginx到最新版
yum install yum-fastestmirro yum install nginxyum update nginx(之前先配置一下)vim /etc/yum.repos.d/nginx.re ...
- innerHTML的运用
<!doctype html> <html> <style> li{float:left;margin:0 100px;color:red;} </style ...
- js解决网页无法复制文字的问题
碰到有些网站,站长禁止了右键,或者用其它方法不让复制网页的文字,弄的好烦人啊,虽然这是小把戏,但多多少少造成了一些不方便,前几天发现这个解决不能复制问题的小方法,一行代码即搞定,就是下面这行: jav ...