题面:hihoCoder#1698 : 假期计划  组合数

题解:

  题目要求是有序的排列,因此我们可以在一开始就乘上A!*B!然后在把这个序列划分成很多段。

  这样的话由于乘了阶乘,所以所有排列我们都已经统计到了,因为划分段的时候乘了组合数,所以每段里面的不同排列都已经统计到了,所以就可以解决这道题了。

  主要难度在与平时我们计算方案时一般都是先划分,再乘阶乘,所以如果陷入这个误区就可能做不出来了。

  所以我们先枚举中间那段有多长,然后乘一下阶乘和处理划分的组合数,最后再乘一下中间这段的第一个可以放在多少个位置。

  因为左右两段都必须非空,所以左边要预留一位,所以第一个可以放的位置在2,同理,最后一个可以放的位置在n - i.减一下就可以得到可以放在n - i - 1个位置。

  注意一下枚举的时候中间的天数最多n - 2,原因同上

  $ans = A! \cdot B! \cdot \binom{A - 1}{n - i - 1} \cdot \binom{B - 1}{i - 1} \cdot (n - i - 1)$   

 #include<bits/stdc++.h>
using namespace std;
#define R register int
#define AC 101000
#define p 1000000009
#define LL long long LL A_ = , B_ = , A, B, t, all, ans;
LL C[][AC], inv[AC]; void cal(LL n, int x)
{
C[x][] = ;
for(R i = ; i <= t; i ++)
C[x][i] = C[x][i - ] * (n - i + ) % p * inv[i] % p;
} void pre()
{
scanf("%lld%lld%lld", &t, &A, &B);
inv[] = inv[] = ;
for(R i = ; i <= t; i ++) inv[i] = (p - p / i) * inv[p % i] % p;
for(R i = ; i <= A; i ++) A_ = A_ * i % p;
for(R i = ; i <= B; i ++) B_ = B_ * i % p;
cal(A - , ), cal(B - , );
all = A_ * B_ % p;
} void work()
{
int b = min(t - , B);
for(R i = ; i <= b; i ++)//枚举中间的天数
ans = (ans + all * C[][t - i - ] % p * C[][i - ] % p * (t - i - ) % p) % p;
printf("%lld\n", ans);
} int main()
{
freopen("in.in", "r", stdin);
pre();
work();
fclose(stdin);
return ;
}

hihoCoder#1698 : 假期计划 组合数的更多相关文章

  1. hihocoder #1698 假期计划 (排列组合+费马小定理+乘法逆元)

    Description 小Ho未来有一个为期N天的假期,他计划在假期中看A部电影,刷B道编程题.为了劳逸结合,他决定先拿出若干天看电影,再拿出若干天刷题,最后再留若干天看电影.(若干代指大于0)  每 ...

  2. [No000016]为什么假期计划总是做不到?

  3. [USACO13DEC]假期计划(黄金)Vacation Planning (gold)

    题目翻译不好,这里给出一份 题目背景 Awson是某国际学校信竞组的一只大佬.由于他太大佬了,于是干脆放弃了考前最后的集训,开车(他可是老司机)去度假.离开学校前,他打开地图,打算做些规划. 题目描述 ...

  4. poj1936 假期计划第一水

    All in All Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 29651   Accepted: 12312 Desc ...

  5. 洛谷P3094 [USACO13DEC]假期计划Vacation Planning

    题目描述 有N(1 <= N <= 200)个农场,用1..N编号.航空公司计划在农场间建立航线.对于任意一条航线,选择农场1..K中的农场作为枢纽(1 <= K <= 100 ...

  6. c++ imooc自学计划

    一.视频学习相关的课程列表: C++远征之起航篇http://www.imooc.com/learn/342: C++远征之离港篇http://www.imooc.com/learn/381: C++ ...

  7. [hihocoder][Offer收割]编程练习赛48

    折线中点 #pragma comment(linker, "/STACK:102400000,102400000") #include<stdio.h> #includ ...

  8. JavaScript和jQuery的学习

    还有12天就要回学校了,我的假期计划还能实现吗?在这12天里,需要把JavaScript和jQuery学完.我知道这两个技术对于前端网页开发非常重要.前期把HTML和CSS学完了,学的不是特别深,只是 ...

  9. [Offer收割]编程练习赛48

    题目1 : 折线中点 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定平面上N个点P1, P2, ... PN,将他们按顺序连起来,形成一条折线. 请你求出这条折线的 ...

随机推荐

  1. 关于mongodb的mapReduce

    由于nodejs本身的限制,在程序中使用js进行大批量计算效率不高.而V8引擎自身对内存大小的限制(64位系统下1.4G),同样限制了数据规模. 因此,相对于从mongodb中抽出数据进行计算,在mo ...

  2. 「国庆训练」ArcSoft's Office Rearrangement(HDU-5933)

    题目与分析 题解见https://blog.csdn.net/cmershen/article/details/53200922. 训练赛场上我们写出来了--在4小时50分钟的时候...激情补题啊.. ...

  3. RabbitMQ基础教程之Spring&JavaConfig使用篇

    RabbitMQ基础教程之Spring使用篇 相关博文,推荐查看: RabbitMq基础教程之安装与测试 RabbitMq基础教程之基本概念 RabbitMQ基础教程之基本使用篇 RabbitMQ基础 ...

  4. 卡片游戏 (Throwing card away I,UVa10935)

    题目描述: 解题思路: 直接模拟 #include <iostream> using namespace std; ] ; int main(int argc, char *argv[]) ...

  5. MySQL数据库怎么截取字符串?

    函数: 1.从左开始截取字符串 left(str, length) 说明:left(被截取字段,截取长度) 例:select left(content,200) as abstract from my ...

  6. nordic mesh中的消息缓存实现

    nordic mesh中的消息缓存实现 代码文件msg_cache.h.msg_cache.c. 接口定义 头文件中定义了四个接口,供mesh协议栈调用,四个接口如下所示,接口的实现代码在msg_ca ...

  7. 十一:Centralized Cache Management in HDFS 集中缓存管理

    集中的HDFS缓存管理,该机制可以让用户缓存特定的hdfs路径,这些块缓存在堆外内存中.namenode指导datanode完成这个工作. Centralized cache management i ...

  8. 阿里校招内推C++岗位编程题第一题 空格最少的字符串

    给定一个字符串S和有效单词的字典D,请确定可以插入到S中的最小空格数,使得最终的字符串完全由D中的有效单词组成.并输出解. 如果没有解则应该输出n/a 例如: 输入: S = “ilikealibab ...

  9. css修改placeholder的样式

    css修改placeholder的样式 input::-webkit-input-placeholder { /* WebKit browsers */ font-size:14px; color: ...

  10. js经典试题之w3规范系列

    js经典试题之w3规范系列 1:w3c 制定的 javascript 标准事件模型的正确的顺序? 答案:事件捕获->事件处理->事件冒泡 解析:先事件捕获从windows > doc ...