1226 - One Unit Machine
Time Limit: 2 second(s) Memory Limit: 32 MB

OUM is a one unit machine which processes jobs. Since it can't handle heavyweight jobs; jobs needs to be partitioned into units. Initially, all the job information and unit partitions are given as input. Then the machine allocates necessary time slots. And in each time slot it asks the user for the name of the job to be processed. After getting the name; the machine determines the next unprocessed unit of that job and processes that unit in that slot. If there is no such unit, the machine crashes. A job is said to be complete if all the units of that job are complete.

For example, let J1 and J2 be two jobs each having 2 units. So, OUM will create 4 time slots. Now the user can give J1 J2 J2 J1 as input. That means it completes the 1st unit of J1 in time slot 1 and then completes the 1st unit of J2 in time slot 2. After that it completes the 2nd unit of J2 and 2nd unit of J1 in time slots 3 and 4 respectively. But if the user gives J1 J1 J2 J1 as input, the machine crashes in time slot 4 since it tries to process 3rd unit of J1 which is not available.

Now, Sam is the owner of a software firm named ACM and he has n jobs to complete using OUM. He wants to complete Jobi before Jobi+1 where 1 ≤ i < n. Now he wants to know the total number of ways he can complete these jobs without crashing the OUM. He assigned you for this task. Two ways are different if at tth slot one processed a unit of Jobi and another processed a unit of Jobj where i ≠ j. For the example above, there are three ways:

J1 J1 J2 J2

J1 J2 J1 J2

J2 J1 J1 J2

Input

Input starts with an integer T (≤ 100), denoting the number of test cases.

Each case starts with an integer n (1 ≤ n ≤ 1000). The next line contains n space separated positive integers k1, k2, k3 ... kn. Where, ki denotes the number of units for the ith job. You can assume that total number of units for all the jobs in any case is not greater than 106.

Output

For each case, print the case number and the result modulo 1000,000,007.

Sample Input

Output for Sample Input

2

2

2 2

3

2 2 3

Case 1: 3

Case 2: 45


Problem Setter: Kazi Rakibul Hossain
Special Thanks: Jane Alam Jan
思路:dp+费马小定理;
题意:有N个任务,每个任务有K个小任务,要求每个任务要做完,就是他的K个小任务要做完。要求所有的任务要做完,并且第i+1个任务要在i个任务做完前做完,问共有多少种方案
dp[i]表示做完第i个任务的方案种数,状态转移方程:dp[i]=dp[i-1]*(Cnm);
考虑加入第i种时,因为第i种要完成,所以最后一个必须是第i种,那么其他的可以在前面的找ans[i-1]个空放,这样也不会改变前i-1个完成的顺序,那么当排第i个时,前面的空共有
ans[i]-1个,所以要在其中选出(ans[i]-ans[i-1]-1)个位置放,那么这就是后面的组合数,然后对1e9+7取模时用费马小定理;
 1 #include<stdio.h>
2 #include<algorithm>
3 #include<string.h>
4 #include<iostream>
5 using namespace std;
6 typedef long long LL;
7 const LL N=1e9+7;
8 LL ans[1005];
9 LL qq[1000005];
10 LL dp[10005];
11 LL quick(LL n,LL m);
12 int main(void)
13 {
14 int i, j ,k;
15 int p,q;
16 qq[0]=1;
17 for(i=1; i<=1000000; i++)
18 {
19 qq[i]=(qq[i-1]*i)%N;
20 }
21 scanf("%d",&k);
22 int cas=0;
23 while(k--)
24 {
25 cas++;
26 scanf("%d",&p);
27 memset(dp,0,sizeof(dp));
28 for(i=1; i<=p; i++)
29 scanf("%lld",&ans[i]);
30 dp[1]=1;
31 LL sum=1;
32 for(i=2; i<=p; i++)
33 {
34 LL cc=ans[i]-1;
35 LL ck=ans[i]+ans[i-1]-1;
36 LL bk=(qq[ans[i-1]])*(qq[cc])%N;
37 LL uu=quick(bk,N-2);
38 sum=(qq[ck]*uu)%N;
39 ans[i]+=ans[i-1];
40 dp[i]=dp[i-1]*(sum)%N;
41 }
42 printf("Case %d: ",cas);
43 printf("%lld\n",dp[p]);
44 }
45 return 0;
46 }
47 LL quick(LL n,LL m)
48 {
49 LL ak=1;
50 while(m)
51 {
52 if(m&1)
53 {
54 ak=ak*n%(N);
55 }
56 n=(n*n)%(N);
57 m/=2;
58 }
59 return ak;
60 }

1226 - One Unit Machine的更多相关文章

  1. LightOJ - 1226 - One Unit Machine(排列组合)

    链接: https://vjudge.net/problem/LightOJ-1226 题意: OUM is a one unit machine which processes jobs. Sinc ...

  2. lightoj 1226 - One Unit Machine(dp+大组合数去摸)

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1226 题解:由于这些任务完成是有先后的所以最后一个完成的肯定是最后一个任务的子 ...

  3. LightOJ 1226 - One Unit Machine Lucas/组合数取模

    题意:按要求完成n个任务,每个任务必须进行a[i]次才算完成,且按要求,第i个任务必须在大于i任务完成之前完成,问有多少种完成顺序的组合.(n<=1000 a[i] <= 1e6 mod ...

  4. 和组合数有关的dp

    1. UVaLive 7143 Room Assignment 用dp[i][r]表示,前i个盒子已经放完了,手上还拿着r对同色球. 状态转移方程为:dp[i+1][r-a-b] = dp[i][r] ...

  5. [CoreOS 转载] CoreOS实践指南(四):集群的指挥所Fleet

    转载:http://www.csdn.net/article/2015-01-14/2823554/2 摘要:CoreOS是采用了高度精简的系统内核及外围定制的操作系统.ThoughtWorks的软件 ...

  6. fleet-运行一个全局的单元

    运行一个全局的单元 正如前面所提到的,全局单元是有用的,用于在您的集群中的所有机器上运行一个单元.它不会比一个普通的单元差太多,而是一个新的x-fleet参数称为Global=true.这是一个示例单 ...

  7. Fleet-运行一个高可用的服务

    运行一个高可用的服务 使用CoreOS最大的好处就是你可以以高可用的方式来运行你的服务.接下来我们将部署两个一样的Apache web server容器.然后,我们将通过让一台机器出现故障,fleet ...

  8. Fleet(集群管理器)

    工作原理 fleet 是通过systemd来控制你的集群的,控制的任务被称之为unit(单元),控制的命令是fleetctl unit运行方式 unit的运行方式有两种: standard globa ...

  9. [Java Basics3] XML, Unit testing

    What's the difference between DOM and SAX? DOM creates tree-like representation of the XML document ...

随机推荐

  1. day03 MySQL数据库之主键与外键

    day03 MySQL数据库之主键与外键 昨日内容回顾 针对库的基本SQL语句 # 增 create database meng; # 查 show databases; shwo create da ...

  2. Flink(八)【Flink的窗口机制】

    目录 Flink的窗口机制 1.窗口概述 2.窗口分类 基于时间的窗口 滚动窗口(Tumbling Windows) 滑动窗口(Sliding Windows) 会话窗口(Session Window ...

  3. CentOS7 搭建maven私服Nexus

    下载解压 官网https://www.sonatype.com/download-oss-sonatype 下载页面 https://help.sonatype.com/repomanager2/do ...

  4. Spring Boot对日志的控制

    一.logback日志技术介绍 Spring Boot中使用的日志技术为logback.其与Log4J都出自同一人,性能要优于Log4J,是Log4J的替代者. 在Spring Boot中若要使用lo ...

  5. 【Linux】【Shell】【text】文本处理工具

    文本查看及处理工具:wc, cut, sort, uniq, diff, patch wc:word count wc [OPTION]... [FILE]... -l: lines -w:words ...

  6. List如何一边遍历,一边删除?

    1.新手常犯的错误 可能很多新手(包括当年的我,哈哈)第一时间想到的写法是下面这样的: public static void main(String[] args) { List<String& ...

  7. SpringMVC中@RestController和@Controller的区别

    在使用SpringMVC时,对于Controller中的注解@RestController和@Controller需要我们区分清楚 @RestController注解相当于@ResponseBody和 ...

  8. java中关于string类和常量池的一点猜想

    public class StringTest { /**   * @param args   */  public static void main(String[] args) {   test1 ...

  9. 『学了就忘』Linux启动引导与修复 — 72、Linux系统的修复模式(单用户模式)

    目录 1.单用户模式常见的错误修复 2.通过单用户模式修改系统密码 (1)进入grub启动引导程序中 (2)编辑相应的系统启动内容 (3)编辑grub配置文件内容 (4)启动系统 (5)修改root用 ...

  10. 【Spark】【复习】Spark入门考前概念相关题复习

    Spark考前概念相关题复习 AUthor:萌狼蓝天 哔哩哔哩:萌狼蓝天 博客园:我的文章 - 萌狼蓝天 博客:萌狼工作室 - 萌狼蓝天 (mllt.cc) 选择题 Hadoop 1.HADOOP的三 ...