题目来源

The 2018 ACM-ICPC China JiangSu Provincial Programming Contest

35.4%

  • 1000ms
  • 65536K

Persona5

Persona5 is a famous video game.

In the game, you are going to build relationship with your friends.

You have N friends and each friends have his upper bound of relationship with you. Let's consider the ithi^{th}ith friend has the upper bound UiU_iUi​. At the beginning, the relationship with others are zero. In the game, each day you can select one person and increase the relationship with him by one. Notice that you can't select the person whose relationship with you has already reach its upper bound. If your relationship with others all reach the upper bound, the game ends.

It's obvious that the game will end at a fixed day regardless your everyday choices. Please calculate how many kinds of ways to end the game. Two ways are said to be different if and only if there exists one day you select the different friend in the two ways.

As the answer may be very large, you should output the answer mod 1000000007

Input Format

The input file contains several test cases, each of them as described below.

  • The first line of the input contains one integers N(1≤N≤1000000)(1 \le N \le 1000000)(1≤N≤1000000), giving the number of friends you have.
  • The second line contains NNN integers. The ithi^{th}ith integer represents UiU_iUi​(1≤Ui≤1000000)( 1 \le U_i \le 1000000)(1≤Ui​≤1000000), which means the upper bound with ithi^{th}ith friend. It's guarantee that the sum of UiU_iUi​ is no more than 1000000.

There are no more than 10 test cases.

Output Format

One line per case, an integer indicates the answer mod 1000000007.

样例输入

3
1 1 1
3
1 2 3

样例输出

6
60
题目大意:有n个朋友,开始和每个朋友的关系为0,给出每个朋友的关系上限,每天只能和一个朋友的关系度增加1,求有多少种方式能够和他们的关系都达到上限。
解题思路:这道题很明显就是高中数学里面的排列组合题,我们可以先忽略先后顺序,直接把每个关系度看成一个朋友然后去掉是同一朋友的关系度,本质就是多重集合的排列计数问题 令 sum=a(1)+a(2)+。。。+a(n) ,答案就是 sum!/a1!a2!...an! 需要先打表,预处理逆元跟阶乘,否则会超时 复杂度:O(nlogn)(预处理)
附上AC代码:
 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e6+;
const int mod=1e9+;
ll fac[maxn],facinv[maxn];
ll n,a[maxn]; ll qpow(ll a,ll b,ll p) //快速幂取模
{
ll res=;
while(b)
{
if(b&) res=res*a%p;
b>>=;
a=a*a%p;
}
return res;
} void init() //求出阶乘与逆元
{
fac[]=fac[]=facinv[]=facinv[]=;
for(int i=;i<maxn;i++)
{
fac[i]=fac[i-]*i%mod;
facinv[i]=facinv[i-]*qpow(i,mod-,mod)%mod;
}
} int main()
{
init();
while(cin>>n)
{
ll sum=;
ll ans=;
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
sum+=a[i];
ans=ans*facinv[a[i]]%mod;
}
ans=ans*fac[sum]%mod;
printf("%d\n",ans);
}
return ;
}

求逆元参考博客:https://blog.csdn.net/baidu_35643793/article/details/75268911

The 2018 ACM-ICPC China JiangSu Provincial Programming Contest快速幂取模及求逆元的更多相关文章

  1. The 2018 ACM-ICPC China JiangSu Provincial Programming Contest J. Set

    Let's consider some math problems. JSZKC has a set A=A={1,2,...,N}. He defines a subset of A as 'Meo ...

  2. The 2018 ACM-ICPC China JiangSu Provincial Programming Contest I. T-shirt

    JSZKC is going to spend his vacation! His vacation has N days. Each day, he can choose a T-shirt to ...

  3. The 2018 ACM-ICPC China JiangSu Provincial Programming Contest(第六场)

    A Plague Inc Plague Inc. is a famous game, which player develop virus to ruin the world. JSZKC wants ...

  4. C.0689-The 2019 ICPC China Shaanxi Provincial Programming Contest

    We call a string as a 0689-string if this string only consists of digits '0', '6', '8' and '9'. Give ...

  5. B.Grid with Arrows-The 2019 ICPC China Shaanxi Provincial Programming Contest

    BaoBao has just found a grid with $n$ rows and $m$ columns in his left pocket, where the cell in the ...

  6. ACM ICPC, Damascus University Collegiate Programming Contest(2018) Solution

    A:Martadella Stikes Again 水. #include <bits/stdc++.h> using namespace std; #define ll long lon ...

  7. 计蒜客 39272.Tree-树链剖分(点权)+带修改区间异或和 (The 2019 ACM-ICPC China Shannxi Provincial Programming Contest E.) 2019ICPC西安邀请赛现场赛重现赛

    Tree Ming and Hong are playing a simple game called nim game. They have nn piles of stones numbered  ...

  8. 计蒜客 39280.Travel-二分+最短路dijkstra-二分过程中保存结果,因为二分完最后的不一定是结果 (The 2019 ACM-ICPC China Shannxi Provincial Programming Contest M.) 2019ICPC西安邀请赛现场赛重现赛

    Travel There are nn planets in the MOT galaxy, and each planet has a unique number from 1 \sim n1∼n. ...

  9. 计蒜客 39279.Swap-打表找规律 (The 2019 ACM-ICPC China Shannxi Provincial Programming Contest L.) 2019ICPC西安邀请赛现场赛重现赛

    Swap There is a sequence of numbers of length nn, and each number in the sequence is different. Ther ...

随机推荐

  1. 汇编 LOOP,LOOPD指令

    一.LOOP指令 循环控制指令LOOP 格式: LOOP 标号 loopd 功能: 1.ECX=ECX-1 2.(ECX)<>0,则转移至标号处循环执行 3.直至(ECX)=0,继续执行后 ...

  2. 一致性哈希(hash)算法

    一.算法背景 一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出的,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似.一致性哈希修正 ...

  3. 配置Nginx反向代理WebSocket,以代理noVNC为例

    什么是Nginx Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器. Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮 ...

  4. ceph学习

    网络: ceph必须要有公共网络和集群网络: public network:负责客户端交互以及osd与mon之间的通讯 cluster network:负责osd之间的复制,均衡,回填,数据恢复等操作 ...

  5. RocketMQ 简单梳理 及 集群部署笔记

    一.RocketMQ 基础知识介绍Apache RocketMQ是阿里开源的一款高性能.高吞吐量.队列模型的消息中间件的分布式消息中间件. 上图是一个典型的消息中间件收发消息的模型,RocketMQ也 ...

  6. Shell学习笔记一

    Shell 简介 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. 基本上Shell分两大类:一:图形界面Shell(G ...

  7. 状态模式-State-订单状态

    JAVA设计模式-状态模式-State-订单状态 21. State(状态)     意图: 允许一个对象在其内部状态改变时改变它的行为.对象看起来似乎修改了它的类. 解释: 比如说对订单的提交,第一 ...

  8. 毕业设计 之 三 mooodle及bigbluebutton使用笔记(未完成)

    毕业设计 之 三 mooodle及bigbluebutton使用笔记 作者:20135216 平台:windows10 备注:N把辛酸泪 附:在准备过程中其他的一些零碎小问题 一.关于moodle 1 ...

  9. Java awt项目开发

    通过Java awt 界面上的知识编写的扫雷游戏 代码中有详细的注解 package com.langsin.saolei; import java.awt.Color;import java.awt ...

  10. ASP.NET MVC应用安全性(一)——自定义错误处理

    很多 ASP.NET  MVC 开发者都会写出高性能的代码,很好地交付软件,等等.但是却并没有安全性方面的计划. 有一种攻击是攻击者截获最终用户提交的表单数据,将其改变再将修改后的数据发送到服务器. ...