题目链接:https://cn.vjudge.net/problem/UVALive-8079

题意

n个人组队,队伍人数小于等于n,每个队伍需要4个不同的职务的领导。

问这n个人可以组成多少队?

n<=1e7

思路

很明显,对一个i人队伍,可以组成$ \sum\binom{i}{1}^4\binom{n}{i} = \sum i^4\binom{n}{i} $种可能。

现在分析一下复杂度,对一个n来讲我们可以求逆元来求组合数,所以O(n)复杂度。

那么现在又有1000行的数据,总的复杂度远远超过了10s的时间。

又要优化了,这次看了半天没有优化思路,赛后有人讲把整个式子拆开即可,反正我是拆不开。

这次用用某同学的方法优化。

\[\begin{align*}
1+\sum_1^n \binom{n}{i}x^i&=(1+x)^n \\
(1+\sum_1^n \binom{n}{i}x^i)'&=((1+x)^n)' \\
\sum_1^n i\binom{n}{i}x^{i-1}&=n(1+x)^{n-1} \\
\sum_1^n i\binom{n}{i}x^i&=n(1+x)^{n-1}x \\
\sum_1^n i^2\binom{n}{i}x^i&=n(n-1)(1+x)^{n-2}x^2+n(1+x)^{n-1}x \\
\sum_1^n i^3\binom{n}{i}x^i&=n(n-1)(n-2)(1+x)^{n-3}x^3+2n(n-1)(1+x)^{n-2}x^2+ n(n-1)(1+x)^{n-2}x^2+n(1+x)^{n-1}x \\
\sum_1^n i^4\binom{n}{i}&=2^{n-4}(n^4+20n^3-55n^2+42n)
\end{align*}
\]

这个思路可以应对$ \sum f(i) \binom{n}{i} $形式的化简,其中f(i)是i的多项乘积。

提交过程

TLE

AC

代码

#include <cstdio>
#include <cstring>
const int maxn=1e7+20;
const int mod=1e8+7;
int pow2[maxn];
void init(void){
pow2[0]=1;
for (int i=1; i<maxn; i++)
pow2[i]=(pow2[i-1]*2)%mod;
// printf("done\n");
} long long pow(long long x, int num){
long long res=1;
for (int i=0; i<num; i++)
res=(res*x)%mod;
return res;
} long long func(int n){
if (n==1) return 1;
if (n==2) return 18;
if (n==3) return 132;
return ((pow2[n-4]*(pow(n, 4) + 6*pow(n, 3) + 3*pow(n, 2) - 2*n )%mod)%mod+mod)%mod;
} int main(void){
long long n; init();
while (scanf("%lld", &n)==1 && n)
printf("%lld\n", func(n)); return 0;
}
Time Memory Length Lang Submitted
66ms None 682 C++ 5.3.0 2018-08-24 23:14:22

UVALive-8079 Making a Team 排列组合公式化简的更多相关文章

  1. UVaLive 7360 Run Step (排列组合,枚举)

    题意:给定一个数 n ,表示一共有 n 步,然后你可以迈一步也可以迈两步,但是左腿和右腿的一步和两步数要一样,并且两步数不小于一步数,问你有多少种方式. 析:虽然是排列组合,但还是不会做.....水啊 ...

  2. 2017ACM暑期多校联合训练 - Team 8 1011 HDU 6143 Killer Names (容斥+排列组合,dp+整数快速幂)

    题目链接 Problem Description Galen Marek, codenamed Starkiller, was a male Human apprentice of the Sith ...

  3. 2017ACM暑期多校联合训练 - Team 1 1006 HDU 6038 Function (排列组合)

    题目链接 Problem Description You are given a permutation a from 0 to n−1 and a permutation b from 0 to m ...

  4. UVa 12712 && UVaLive 6653 Pattern Locker (排列组合)

    题意:给定 一个n * n 的宫格,就是图案解锁,然后问你在区间 [l, r] 内的所有的个数进行组合,有多少种. 析:本来以为是数位DP,后来仔细一想是排列组合,因为怎么组合都行,不用考虑实际要考虑 ...

  5. 【指数型母函数】hdu1521 排列组合

    #include<cstdio> #include<cstring> using namespace std; int n,m,jiecheng[11]; double a[1 ...

  6. 学习sql中的排列组合,在园子里搜着看于是。。。

    学习sql中的排列组合,在园子里搜着看,看到篇文章,于是自己(新手)用了最最原始的sql去写出来: --需求----B, C, F, M and S住在一座房子的不同楼层.--B 不住顶层.C 不住底 ...

  7. .NET平台开源项目速览(11)KwCombinatorics排列组合使用案例(1)

    今年上半年,我在KwCombinatorics系列文章中,重点介绍了KwCombinatorics组件的使用情况,其实这个组件我5年前就开始用了,非常方便,麻雀虽小五脏俱全.所以一直非常喜欢,才写了几 ...

  8. 【原创】开源.NET排列组合组件KwCombinatorics使用(三)——笛卡尔积组合

           本博客所有文章分类的总目录:本博客博文总目录-实时更新 本博客其他.NET开源项目文章目录:[目录]本博客其他.NET开源项目文章目录 KwCombinatorics组件文章目录: 1. ...

  9. 【原创】开源.NET排列组合组件KwCombinatorics使用(二)——排列生成

           本博客所有文章分类的总目录:本博客博文总目录-实时更新 本博客其他.NET开源项目文章目录:[目录]本博客其他.NET开源项目文章目录 KwCombinatorics组件文章目录: 1. ...

随机推荐

  1. select的option触发事件

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  2. 1.2 为Eclipse绑定Tomcat

    1.window→preferences打开属性窗口 2.点击add 3.点击Tomcat6.0 点击next 4.选择tomcat的解压目录和jdk,并点击finish 5.点击ok 6.打开ser ...

  3. Git学习总结(11)——Git撤销操作详解

    本文主要讨论和撤销有关的 git 操作.目的是让读者在遇到关于撤销问题时能够方便迅速对照执行解决问题,而不用去翻阅参数繁多的 git 使用说明. 一开始你只需了解大致功能即可,不必记住所有命令和具体参 ...

  4. IntelliJ IDEA 对于generated source的处理

    IntelliJ IDEA 对于generated source的处理 学习了:https://stackoverflow.com/questions/5170620/unable-to-use-in ...

  5. [HTML 5] Styling with ARIA

    See if you can do a better job styling this button using ARIA states. One huge benefit to styling wi ...

  6. centos6安装eclipse

    1. 下载eclipse 我下载的是eclipse-jee-juno-SR2-linux-gtk-x86_64.tar.gz 能够在http://www.eclipse.org/downloads/处 ...

  7. 浅析C++绑定到Lua的方法

    注:原文也在公司内部论坛上发了  概述       尽管将C++对象绑定到Lua已经有tolua++(Cocos2d-x 3.0用的就是这个).LuaBridge(我们游戏client对这个库进行了改 ...

  8. POJ1390 Blocks 【动态规划】

    Blocks Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 4173   Accepted: 1661 Descriptio ...

  9. Reusability1

    Reusability 1. 复用的层面 1.1 代码级别复用 顾名思义,代码复用就是把代码都搬过来,这是最主要的复用 1.1.1 白盒复用 白盒的意思就是里面的东西我们都知道是什么,具体实现的方式也 ...

  10. leetcode 系列文章目录

    leetcode 系列文章目录 0. 两数之和1. 两数相加 2. 无重复字符的最长子串 3. 寻找两个有序数组的中位数 4. 最长回文子串 5. Z 字形变换 6. 整数反转 7. 字符串转换整数 ...