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; ...
随机推荐
- C++测试利器--google test开源测试框架
资料 偶然发现了google的测试框架gtest,马上试了下,效果挺不错,特别是对于写c++的人来说,方便很多.以前自己写c++的模块,通常是写好了模块后再另外定义些函数,然后在函数里面写测试用例来测 ...
- JSP-表单元素示例
<%@ page language="java" pageEncoding="UTF-8"%><%@ page import="ja ...
- Oracle客户端工具安装
Oracle简易客户端登录工具安装 @[Database|Oracle|客户端工具] [TOC] 引言 Oracle服务的安装是一件的繁琐的事情,我们往往喜欢在本地不安装oracle数据库的方式来访问 ...
- 深入理解 JavaScript 异步系列(1)—— 什么是异步
前言 2014年秋季写完了<深入理解javascript原型和闭包系列>,已经帮助过很多人走出了 js 原型.作用域.闭包的困惑,至今仍能经常受到好评的留言. 很早之前我就总结了JS三座大 ...
- 令人眼前一亮的下拉式终端 Tilda & Guake
前言 老夫是 Linux 的老用户. 大一的时候某不方便透露姓名的校内组织给了一个 Fedora 13 的安装光盘,然后老夫学会了重装 Windows. 大二的时候知道了 Ubuntu ,开始在虚拟机 ...
- “使用多target来构建大量相似App”,唐巧大神理论验证(附工程代码地址)
无意间看到巧神的文章时,感觉非常兴奋,此文章正好解决了公司目前项目的痛点. 读到以下关键一段时,不甚明了,故自己做了实验分享给有缘人. "我们的每个课程的资源文件都具有相同的文件名,例如首页 ...
- Oracle 重建控制文件
前些天在做Oracle数据库恢复测试时,因为一些异常操作导致控制文件出了问题,数据库无法正常使用,这里记录一下重建控制文件的操作 一.使用sysdba用户登入数据库 此时普通用户已无法链接数据库 二. ...
- 移动端利用rem实现自适应布局
好久没有写博客了,刚好说说最近遇到的移动端布局问题吧. 本来一直是觉得我的页面布局能力还是不错的,当然,是相对于较基础的来说还是不错的.不过,自己写的案例终归是跟实际开发有区别的,自己写案例的是觉得这 ...
- 安装SVN报无法访问windows installer服务。
第一步:点击开始--运行,输入:cmd 第二步:输入regsvr32 msi.dll然后回车,会提示成功. 第三步:点击开始--运行,输入:services.msc按回车 第四部:调到页面后找到Win ...
- 3360: [Usaco2004 Jan]算二十四
3360: [Usaco2004 Jan]算二十四 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 6 Solved: 6[Submit][Statu ...