题意:给你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 (数论+组合数学)的更多相关文章

  1. 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 ...

  2. 【数论-数位统计】UVa 11076 - Add Again

    Add AgainInput: Standard Input Output: Standard Output Summation of sequence of integers is always a ...

  3. UVA 11076 - Add Again(组合)

    题目链接 脑子抽了,看错题了,神奇的看成没有0了.主要问题把n个数插入m个相同的数,把m个数给分成1-m堆,然后插到n+1空里. #include <cstdio> #include &l ...

  4. UVA 11076 Add Again

    题目链接:UVA-33478 题意为给定n个数,求这n个数能组成的所有不同的排列组成的数字的和. 思路:发现对于任意一个数字,其在每一位出现的次数是相同的.换言之,所有数字的每一位相加的和是相同的. ...

  5. 数论 UVA 11076

    这道题目的意思简单易懂说的是给你n个数(可能有重复相同的数字),列出他们所有排列的情况,再逐位相加,求出和,例如:给你1,2,3,则排列的情况为<123>, <132>, &l ...

  6. UVa 11076 (有重元素的排列) Add Again

    n个可重复的元素的排列一共有 = All种,其中 假设这些数依次为ai,每种数字有mi个. 从右往左考虑第d位数(d≥0),第i个数字出现的次数为,那么这个数字对所求答案的贡献为 其实可以先一次求出个 ...

  7. Add Again UVA - 11076(排列之和)

    题意: 输入n个数字,求这些数字 所有全排列的和 (1<= n <= 12) 对于任意一个数字,其在每一位出现的次数是相同的    即所有数字的每一位相加的和是相同的. 因此可以等效为它们 ...

  8. 【NOIP合并果子】uva 10954 add all【贪心】——yhx

    Yup!! The problem name reects your task; just add a set of numbers. But you may feel yourselvesconde ...

  9. UVA 10954 Add All 哈夫曼编码

    题目链接: 题目 Add All Time Limit:3000MS Memory Limit:0KB 问题描述 Yup!! The problem name reflects your task; ...

随机推荐

  1. C++测试利器--google test开源测试框架

    资料 偶然发现了google的测试框架gtest,马上试了下,效果挺不错,特别是对于写c++的人来说,方便很多.以前自己写c++的模块,通常是写好了模块后再另外定义些函数,然后在函数里面写测试用例来测 ...

  2. JSP-表单元素示例

    <%@ page language="java" pageEncoding="UTF-8"%><%@ page import="ja ...

  3. Oracle客户端工具安装

    Oracle简易客户端登录工具安装 @[Database|Oracle|客户端工具] [TOC] 引言 Oracle服务的安装是一件的繁琐的事情,我们往往喜欢在本地不安装oracle数据库的方式来访问 ...

  4. 深入理解 JavaScript 异步系列(1)—— 什么是异步

    前言 2014年秋季写完了<深入理解javascript原型和闭包系列>,已经帮助过很多人走出了 js 原型.作用域.闭包的困惑,至今仍能经常受到好评的留言. 很早之前我就总结了JS三座大 ...

  5. 令人眼前一亮的下拉式终端 Tilda & Guake

    前言 老夫是 Linux 的老用户. 大一的时候某不方便透露姓名的校内组织给了一个 Fedora 13 的安装光盘,然后老夫学会了重装 Windows. 大二的时候知道了 Ubuntu ,开始在虚拟机 ...

  6. “使用多target来构建大量相似App”,唐巧大神理论验证(附工程代码地址)

    无意间看到巧神的文章时,感觉非常兴奋,此文章正好解决了公司目前项目的痛点. 读到以下关键一段时,不甚明了,故自己做了实验分享给有缘人. "我们的每个课程的资源文件都具有相同的文件名,例如首页 ...

  7. Oracle 重建控制文件

    前些天在做Oracle数据库恢复测试时,因为一些异常操作导致控制文件出了问题,数据库无法正常使用,这里记录一下重建控制文件的操作 一.使用sysdba用户登入数据库 此时普通用户已无法链接数据库 二. ...

  8. 移动端利用rem实现自适应布局

    好久没有写博客了,刚好说说最近遇到的移动端布局问题吧. 本来一直是觉得我的页面布局能力还是不错的,当然,是相对于较基础的来说还是不错的.不过,自己写的案例终归是跟实际开发有区别的,自己写案例的是觉得这 ...

  9. 安装SVN报无法访问windows installer服务。

    第一步:点击开始--运行,输入:cmd 第二步:输入regsvr32 msi.dll然后回车,会提示成功. 第三步:点击开始--运行,输入:services.msc按回车 第四部:调到页面后找到Win ...

  10. 3360: [Usaco2004 Jan]算二十四

    3360: [Usaco2004 Jan]算二十四 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 6  Solved: 6[Submit][Statu ...