【Cf #178 A】Shaass and Lights(组合数)

时间:2021-10-19 20:16:18

【Cf #178 A】Shaass and Lights(组合数)

考虑两个灯之间的暗灯,能从左边或右边点亮两种顺序,而最左端或最右端只有一种点亮顺序。

先不考虑点灯顺序,总共有n - m个灯要点亮,对于连续的一段暗灯,他们在总的点灯顺序中的是等价的,于是问题就可以抽象成有重复元素的组合数:

$ C = \frac{ (n - m)! }{ \prod_{i = 1}^{k} \, x_{i} ! }  $ 。

在考虑一段连续的暗灯内部的点灯顺序,只要让答案乘上 $ 2 ^ {len - 1} $ 即可。

$ \bigodot $ 技巧&套路:

  • 组合数应用的模型,组合数的运用
 #include <cstdio>
#include <algorithm> typedef long long LL;
const int N = , MOD = 1e9 + ; int n, m, a[N], d[N], pw2[N], fac[N]; int Pow(int x, int b, int re = ) {
for (; b; b >>= , x = (LL) x * x % MOD) if (b & ) re = (LL) re * x % MOD;
return re;
} int main() {
scanf("%d%d", &n, &m);
pw2[] = fac[] = ;
for (int i = ; i <= m; ++i) {
scanf("%d", &a[i]);
}
for (int i = ; i <= n; ++i) {
pw2[i] = pw2[i - ] * % MOD;
fac[i] = (LL) fac[i - ] * i % MOD;
}
std::sort(a + , a + + m); int ans = fac[n - m];
for (int i = ; i < m; ++i) {
int d = a[i + ] - a[i] - ;
if (d == ) continue;
ans = (LL) ans * Pow(fac[d], MOD - ) % MOD;
ans = (LL) ans * pw2[d - ] % MOD;
}
if (a[] > ) ans = (LL) ans * Pow(fac[a[] - ], MOD - ) % MOD;
if (a[m] < n) ans = (LL) ans * Pow(fac[n - a[m]], MOD - ) % MOD;
printf("%d\n", ans); return ;
}

【Cf #178 A】Shaass and Lights(组合数)的更多相关文章

  1. CF294C Shaass and Lights(排列组合)

    题目描述 There are n n n lights aligned in a row. These lights are numbered 1 1 1 to n n n from left to ...

  2. C&period; Shaass and Lights 组合数学

    http://codeforces.com/contest/294/problem/C 把那个数组n分段了,那么有两类. 1.开头和端点那些,就是只有一端在开始的,这个时候,要开完这些灯,只能循序渐进 ...

  3. CF294C Shaass and Lights

    题目大意: 有n盏灯,(0<=n<=1000),有m盏已经点亮,每次只能点亮与已经点亮的灯相邻的灯,求总方案数,答案对1e9+7取模 第一行:两个整数n,m表示灯的总数和已点亮的灯的数目 ...

  4. Codeforces Round &num;178 &lpar;Div&period; 2&rpar;

    A. Shaass and Oskols 模拟. B. Shaass and Bookshelf 二分厚度. 对于厚度相同的书本,宽度竖着放显然更优. 宽度只有两种,所以枚举其中一种的个数,另一种的个 ...

  5. OUC&lowbar;OptKernel&lowbar;oshixiaoxiliu&lowbar;好题推荐

    poj1112 Team Them Up! 补图二分图+dp记录路径codeforces 256A Almost Arithmetical Progression dp或暴力 dp[i][j] = d ...

  6. Codeforces Round &num;178 &lpar;Div&period; 2&rpar; B&period; Shaass and Bookshelf —— DP

    题目链接:http://codeforces.com/contest/294/problem/B B. Shaass and Bookshelf time limit per test 1 secon ...

  7. Codeforces Round &num;178 &lpar;Div&period; 2&rpar; B &period;Shaass and Bookshelf

    Shaass has n books. He wants to make a bookshelf for all his books. He wants the bookshelf's dimensi ...

  8. cf里的一些简单组合数题

    cf711D 成环的和不成环的要单独计算,环用双联通做的QAQ /* 所有情况-成环的情况 */ #include<bits/stdc++.h> using namespace std; ...

  9. HDOJ 4770 Lights Against Dudely

    状压+暴力搜索 Lights Against Dudely Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ...

随机推荐

  1. 百度sdk定位不成功&comma;关闭定位

    公司项目有用到百度地图,登录的时候需要定位一次,获取登录的地址信息,在手机无法连接外网的情况,也就无法访问百度定位服务器的时候,定位的回调函数要30秒以上才能返回结果,于是去仔细查百度api,发现没有 ...

  2. django开发的社区和博客

    社区 线上地址:http://codetheme.sinaapp.com/ Githubhttps://github.com/BeginMan/codetheme 由于利用两周下班时间熬夜做的,难免有 ...

  3. Ajax本地跨域问题

    问题:打开本地html文件时,,报错如下 Cross origin requests are only supported for protocol schemes: http, data,chrom ...

  4. ios view的frame和bounds之区别(位置和大小)

    前言: 学习ios开发有一段时间了,项目也做了两个了,今天看视频,突然发现view的frame和bound两个属性,发现bound怎么也想不明白,好像饶你了死胡同里,经过一番尝试和思考,终于弄明白bo ...

  5. xxx is not in the sudoers file&period;This incident will be reported&period;的解决方法

    1.切换到root用户下,怎么切换就不用说了吧,不会的自己百度去. 2.添加sudo文件的写权限,命令是:chmod u+w /etc/sudoers 3.编辑sudoers文件vi /etc/sud ...

  6. 我们熟悉的Textbox

    创建只读文本框 方法一: 可用Readonly属性防止用户编辑文本框内容.将Readonly属性设置为True后,用户就可以滚动文本框中的文本并将其突出显示,但不能作任何更改.将Readonly属性设 ...

  7. 《JS权威指南学习总结--8&period;6 函数闭包》

    内容要点: 和其他大多数现代编程一样,JS也采用词法作用域,也就是说,函数的执行依赖于变量作用域,这个作用域是在函数定义时决定的,而不是函数调用时决定的. 为了实现这种词法作用域,JS函数对象的内部状 ...

  8. Nginx拦截算法

    Nginx流量拦截算法 nginx 夏日小草 2015年10月22日发布 |   1 收藏  |  40 4.2k 次浏览 0x00.About 电商平台营销时候,经常会碰到的大流量问题,除了做流量分 ...

  9. c&plus;&plus; 如何获取多线程的返回值?

    // Console.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <stdlib.h> #include ...

  10. Android进阶:三、这一次,我们用最详细的方式解析Android消息机制的源码

    决定再写一次有关Handler的源码 Handler源码解析 一.创建Handler对象 使用handler最简单的方式:直接new一个Handler的对象 Handler handler = new ...