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

/** @Date    : 2016-11-21-18.26

* @Author : Lweleth (SoungEarlf@gmail.com)

* @Link : https://github.com/

* @Version :

*/

#include <stdio.h>

#include <iostream>

#include <string.h>

#include <algorithm>

#include <utility>

#include <vector>

#include <map>

#include <set>

#include <string>

#include <stack>

#include <queue>

//#include<bits/stdc++.h>

#define LL long long

#define MMF(x) memset((x),0,sizeof(x))

#define MMI(x) memset((x), INF, sizeof(x))

using namespace std;



const int INF = 0x3f3f3f3f;

const int N = 1e5+20;

const LL mod = 1000000007;



LL inv[N*10], fa[N*10];



LL fpow(LL a, int n)

{

LL r = 1;

while(n > 0)

{

if(n & 1)

r = r * a % mod;

a = a * a % mod;

n >>= 1;

}

return r;

}

void init()

{

fa[0] = 1;

inv[0] = 1;

for(LL i = 1; i <= 1000100; i++)

{

fa[i] = fa[i-1] * i % mod;

inv[i] = fpow(fa[i], mod - 2);

}

}



LL C(LL n, LL m)

{

if(m > n)

return 0;

LL ans = 0;

ans = ((fa[n] * inv[m] % mod)* inv[n-m]) % mod;

return ans;

}



LL lucas(LL n, LL m)

{

if(m == 0)

return 1;

return C(n % mod, m % mod) * lucas(n / mod, m / mod) % mod;

}

LL a[1100];

int main()

{

int T;

cin >> T;

init();

int cnt = 0;

while(T--)

{

LL n;

scanf("%lld", &n);

for(int i = 1; i <= n; i++)

scanf("%lld", a + i);

LL ans = 1;

LL ct = 0;

for(int i = 1; i <= n; i++)

{

ct += a[i];

ans = (ans*lucas(ct-1, a[i]-1) % mod);

}

printf("Case %d: %lld\n", ++cnt, ans);

}

return 0;

}


LightOJ 1226 - One Unit Machine Lucas/组合数取模的更多相关文章

  1. BZOJ_2142_礼物_扩展lucas+组合数取模+CRT

    BZOJ_2142_礼物_扩展lucas+组合数取模 Description 一年一度的圣诞节快要来到了.每年的圣诞节小E都会收到许多礼物,当然他也会送出许多礼物.不同的人物在小E 心目中的重要性不同 ...

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

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

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

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

  4. 1226 - One Unit Machine

    1226 - One Unit Machine   PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB ...

  5. 组合数取模Lucas定理及快速幂取模

    组合数取模就是求的值,根据,和的取值范围不同,采取的方法也不一样. 下面,我们来看常见的两种取值情况(m.n在64位整数型范围内) (1)  , 此时较简单,在O(n2)可承受的情况下组合数的计算可以 ...

  6. hdu 3944 DP? 组合数取模(Lucas定理+预处理+帕斯卡公式优化)

    DP? Problem Description Figure 1 shows the Yang Hui Triangle. We number the row from top to bottom 0 ...

  7. lucas定理解决大组合数取模

    LL MyPow(LL a, LL b) { LL ret = ; while (b) { ) ret = ret * a % MOD; a = a * a % MOD; b >>= ; ...

  8. 2015 ICL, Finals, Div. 1 Ceizenpok’s formula(组合数取模,扩展lucas定理)

    J. Ceizenpok’s formula time limit per test 2 seconds memory limit per test 256 megabytes input stand ...

  9. 组合数取模&&Lucas定理题集

    题集链接: https://cn.vjudge.net/contest/231988 解题之前请先了解组合数取模和Lucas定理 A : FZU-2020  输出组合数C(n, m) mod p (1 ...

随机推荐

  1. 总结get和post区别

    参考博文: 浅谈HTTP中Get与Post的区别 1. 数据传递方向: Get是向服务器发索取数据的一种请求,Post是向服务器提交数据的一种请求 (都是请求,并不是一个取一个发) Get:①用于获取 ...

  2. JDK源码分析 – LinkedList

    LinkedList类的申明 public class LinkedList<E> extends AbstractSequentialList<E> implements L ...

  3. ZOJ 1539 L-Lot

    https://vjudge.net/contest/67836#problem/L Out of N soldiers, standing in one line, it is required t ...

  4. SERVER 2008 R2 SP1下的内存虚拟盘(支持32位,64位的所有windows版本)

    一时冲动把笔记本的系统换成了2008 R2 SP1的,本来想着用笔记本开HYPER-V的,结果是失败了,我发现我的4750G开了HYPER-V后CPU一直居高不下,其中有个什么系统软件保护的服务就占用 ...

  5. sublime Remote_encoding cp1252

    "remote_encoding": "cp1252",才能连接远程ftp

  6. HTML5+ API 学习

    HTML5+ API 模块整理 API Reference 模块 中文 模块介绍 Accelerometer 加速计 管理设备加速度传感器,用于获取设备加速度信息,包括x(屏幕水平方向).y(垂直屏幕 ...

  7. 【Python】python和json数据相互转换,json读取和写入,repr和eval()使用

    python数据转换json 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 import jso ...

  8. RT-thread内核之线程调度器

    一.前言 RT-Thread中提供的线程调度器是基于全抢占式优先级的调度,在系统中除了中断处理函数.调度器上锁部分的代码和禁止中断的代码是不可抢占的之外,系统的其他部分都是可以抢占的,包括线程调度器自 ...

  9. servlet的service特性就是http协议的特性 即连接完就断开

    servlet的service特性就是http协议的特性 即连接完就断开

  10. C# 大文件的复制方法

    如何复制读取大文件,也许困惑了很多人很长时间,这个不知道怎么搞,的确让人头疼欲裂,知道了你就才发现原来那么简单,话不多说,直入正题```` static void Main(string[] args ...