Uva 11076 Add Again (数论+组合数学)
题意:给你N个数,求把他们的全排列加和为多少
思路:对于这道题,假设数字k1在第一位,然后求出剩下N-1位的排列数num1,我们就可以知道k1在第一位时
排列有多少种为kind1, 同理,假设数字k2在第一位然后求出剩下N-1位的排列数num2,
我们就可以知道k2在第一位时的排列有多少种为kind2,
k1*num1+k1*num2.....+kn*numn 就是我们要求的这些数对第一位的所有贡献,
我们知道第一位的贡献=对第二位的贡献=第三位的贡献.....
把所有贡献加和,就能求出结果
知识:
1、 如何求重复数的全排列
元素表述: a1,a1,...a1, a2,a2,...a2,.......,an,an,...an
其中,a1的个数为N1, a2的个数为N2,以此类推,总个数为M。
则可以证明不重复的排列种类的数目: M!/(N1!*N2!*...*Nn!)
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#define ull unsigned long long
using namespace std; ull C[][]; void get_C()
{
memset(C,,sizeof(C));
C[][]=;
C[][]=;
for(int i=;i<=;i++)
{
for(int j=;j<=i;j++)
{
C[i][j]=C[i-][j]+C[i-][j-];
}
}
} int main()
{
int n;
int data[];
int num[];
get_C();
while(cin>>n&&n)
{
memset(num,,sizeof(num));
for(int i=;i<n;i++)
{
cin>>data[i];
num[data[i]]++;
}
ull ans=;
for(int i=;i<=;i++)
{
ull k=;
if(num[i])
{
k=;
int m=n-;
num[i]--;
for(int j=;j<=;j++)
{
if(num[j]==) continue;
k=k*C[m][num[j]];
m=m-num[j];
//cout<<k<<endl;
}
num[i]++; }
ans=ans+i*k;
}
ull sum=;
for(int i=;i<n;i++)
sum=sum*+ans;
cout<<sum<<endl;
}
return ;
}
Uva 11076 Add Again (数论+组合数学)的更多相关文章
- UVA 11076 Add Again 计算对答案的贡献+组合数学
A pair of numbers has a unique LCM but a single number can be the LCM of more than one possiblepairs ...
- 【数论-数位统计】UVa 11076 - Add Again
Add AgainInput: Standard Input Output: Standard Output Summation of sequence of integers is always a ...
- UVA 11076 - Add Again(组合)
题目链接 脑子抽了,看错题了,神奇的看成没有0了.主要问题把n个数插入m个相同的数,把m个数给分成1-m堆,然后插到n+1空里. #include <cstdio> #include &l ...
- UVA 11076 Add Again
题目链接:UVA-33478 题意为给定n个数,求这n个数能组成的所有不同的排列组成的数字的和. 思路:发现对于任意一个数字,其在每一位出现的次数是相同的.换言之,所有数字的每一位相加的和是相同的. ...
- 数论 UVA 11076
这道题目的意思简单易懂说的是给你n个数(可能有重复相同的数字),列出他们所有排列的情况,再逐位相加,求出和,例如:给你1,2,3,则排列的情况为<123>, <132>, &l ...
- UVa 11076 (有重元素的排列) Add Again
n个可重复的元素的排列一共有 = All种,其中 假设这些数依次为ai,每种数字有mi个. 从右往左考虑第d位数(d≥0),第i个数字出现的次数为,那么这个数字对所求答案的贡献为 其实可以先一次求出个 ...
- Add Again UVA - 11076(排列之和)
题意: 输入n个数字,求这些数字 所有全排列的和 (1<= n <= 12) 对于任意一个数字,其在每一位出现的次数是相同的 即所有数字的每一位相加的和是相同的. 因此可以等效为它们 ...
- 【NOIP合并果子】uva 10954 add all【贪心】——yhx
Yup!! The problem name reects your task; just add a set of numbers. But you may feel yourselvesconde ...
- UVA 10954 Add All 哈夫曼编码
题目链接: 题目 Add All Time Limit:3000MS Memory Limit:0KB 问题描述 Yup!! The problem name reflects your task; ...
随机推荐
- pl/sql 导出oracle表结构
tools->export tables 是导出表结构还有数据 tools->export user objects是导出表结构 可以用tools->export tables ...
- VS2015在Windows 10 下面安装经验
实体机环境:Windows 10 专业版(2017年2月28日 官方下载版本) VS2015:cn_visual_studio_enterprise_2015_with_update_3_x86_x6 ...
- Java基本数据类型及其封装器的一些千丝万缕的纠葛
一些概念 想必大家都知道Java的基础数据类型有:char.byte.short.int.long.float.double.boolean 这几种,与C/C++等语言不同的是,Java的基础 ...
- spring init
DN学院讲师招募 Markdown编辑器轻松写博文 TOP 50 CTO坐镇直招 读文章说感想获好礼 通过Spring @PostConstruct 和 @PreDestroy ...
- 浅析=======Struts2之==========valueStack
今天刚学习了struts2的valueStack,在这里把自己学到的做个分享,说道valueStack就不得不提OGNL表达式=== struts2工作流程 1.OGNL(Object Graph N ...
- 基于Struts自定义MVC-1
自定义MVC 数据库:Oracle表:User(id,uname,upwd)自定义Struts框架一.定义Action接口 1 import javax.servlet.http.*; ...
- EAS组件编辑和显示的自定义
KDFormattedTextField kdtEntrys_returnAmount_TextField = new KDFormattedTextField(); kdtEntrys_return ...
- JAVA基础:自己构造一个按递增排列的数组,用户输入一个数,插入适当位置
- Strtus2 S2-045漏洞
S2-045漏洞已经爆发几天了,但还很多网址都存在此漏洞,很多金融类网站也收到了保护费通知...唉,收保护费少,报警无效!只能酌情处理了!做黑产的,还是少做为秒,常在河边站哪有不湿鞋,劝各位早日金盆洗 ...
- 百度地图JavascriptApi Marker平滑移动及车头指向行径方向
相信只要是使用百度地图做实时定位服务的朋友都会遇到这个问题,在对坐标位置进行覆盖物展示的时候,会出现由于获取坐标数据时间或者两个坐标点相距过远,导致在视觉上看Marker移动就像"僵尸跳&q ...