CTU Open 2018 Lighting /// 组合数递推 二进制
题目大意:
给定n k 给定一个数的二进制位a[]
求这个数加上 另一个二进制位<=n的数b 后
能得到多少个不同的 二进制位有k个1 的数
10 5
1000100111
b取值范围是 0000000000~1111111111
所以 c取值范围是 1000100111~11000100110
也就是求在这个范围里 有5个1的数 有多少个
要让数变大 考虑把0变为1 这样变化能保证得到的数绝对变大
对于第一个0
此时遇到了1 即到了10001xxxxx
因为要保证>= 1000100111
所以1必须固定不能变换
那么 继续看下一个0
100010xxxx 变为 100011xxxx
方案数是C(4,2)
1000100xxx 变为 1000101xxx
方案数是C(3,2)
然后1000100111本身也是一种方案
会发现其实就是在0位累加组合数
1 0 0 0 1 0 0 1 1 1
C(8,3)+C(7,3)+C(6,3) +C(4,2)+C(3,2) +1(本身)
所以10位的可能方案有 56+35+20+6+3+1=121
要让数变小 就考虑把1变为0
因为必须保证11位 所以默认第一位为1
对于第二个1
11xxxxxxxxx 变为 10xxxxxxxxx
剩下的x中需要再有4个1 所以方案数是C(9,4)
对于第三个1
110001xxxxx 变为 110000xxxxx
方案数是C(5,3)
对于第四个1
110001001xx 变为 110001000xx
方案数是C(2,2)
对于第五个1
1100010011x 变为 1100010000x
方案数是C(1,1)
然后11000100110本身也是一种方案
1 1 0 0 0 1 0 0 1 1 0
C(9,4) +C(5,3) +C(2,2)+C(1,1) +1(本身)
所以11位的可能方案有 126+20+1+1+1=149
#include <bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
#define LL long long
#define mem(i,j) memset(i,j,sizeof(i))
#define inc(i,j,k) for(int i=j;i<=k;i++)
#define dec(i,j,k) for(int i=j;i>=k;i--)
const int N=1e3+;
const int mod=1e9+; int n,k,a[N];
char s[N];
LL C[N][N]; void init() {
C[][]=C[][]=C[][]=1LL;
inc(i,,N-) {
C[i][]=1LL;
inc(j,,i-) {
C[i][j]=(C[i-][j-]+C[i-][j])%mod;
}
C[i][i]=1LL;
}
} int main()
{
init();
while(~scanf("%d%d%s",&n,&k,s)) {
int cnt=;
inc(i,,n-) {
if(s[i]=='')a[i]=;
else a[i]=, cnt++;
} if(k==) {
if(cnt==) printf("1\n");
else printf("0\n"); continue;
}
if(cnt==) {
printf("%d\n",C[n][k]); continue;
} LL ans=;
int U=k-, D=n-;
inc(i,,n-) {
if(U<) break;
if(a[i]==) U--;
else ans=(ans+C[D][U])%mod;
D--;
}
if(cnt<=k) ans=(ans+1LL)%mod; // 本身 reverse(a,a+n);
inc(i,,n-) {
a[i]+=;
if(a[i]>) a[i+]++;
a[i]%=;
}
reverse(a,a+n+); U=k-, D=n-;
inc(i,,n) {
if(U==) break;
if(a[i]==) {
ans=(ans+C[D][U])%mod;
U--;
}
D--;
}
cnt=;
inc(i,,n) if(a[i]==) cnt++;
if(cnt>=k) ans=(ans+1LL)%mod; // 本身 printf("%lld\n",ans);
} return ;
}
CTU Open 2018 Lighting /// 组合数递推 二进制的更多相关文章
- loj #6261 一个人的高三楼 FFT + 组合数递推
\(\color{#0066ff}{ 题目描述 }\) 一天的学习快要结束了,高三楼在晚自习的时候恢复了宁静. 不过,\(HSD\) 桑还有一些作业没有完成,他需要在这个晚自习写完.比如这道数学题: ...
- Codeforces 631 (Div. 2) D. Dreamoon Likes Sequences 位运算^ 组合数 递推
https://codeforces.com/contest/1330/problem/D 给出d,m, 找到一个a数组,满足以下要求: a数组的长度为n,n≥1; 1≤a1<a2<⋯&l ...
- UVA1635 Irrelevant Elements(唯一分解定理 + 组合数递推)
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=51196 紫书P320; 题意:给定n个数a1,a2····an,依次求出相邻 ...
- UVa 10253 (组合数 递推) Series-Parallel Networks
<训练之南>上的例题难度真心不小,勉强能看懂解析,其思路实在是意想不到. 题目虽然说得千奇百怪,但最终还是要转化成我们熟悉的东西. 经过书上的神分析,最终将所求变为: 共n个叶子,每个非叶 ...
- hdu2068 RPG的错排 组合数/递推
#include<stdio.h> ]; long long c(int a,int b) { ,j; ;i>=a-b+,j<=b;i--,j++) sum=sum*i/j; ...
- 紫书 例题 10-14 UVa 12034(组合数+递推)
这道题有点类似动态规划,设答案为f(n) 第一个人有i个人,就有c(n,i)种可能 然后后面有f(n-i)种可能,所以相乘,然后枚举所有可能加起来就ok了. #include<cstdio> ...
- Leetcode 118 Pascal's Triangle 数论递推
杨辉三角,即组合数 递推 class Solution { vector<vector<int>> v; public: Solution() { ; i < ; ++i ...
- 【(好题)组合数+Lucas定理+公式递推(lowbit+滚动数组)+打表找规律】2017多校训练七 HDU 6129 Just do it
http://acm.hdu.edu.cn/showproblem.php?pid=6129 [题意] 对于一个长度为n的序列a,我们可以计算b[i]=a1^a2^......^ai,这样得到序列b ...
- CJOJ 2255 【NOIP2016】组合数问题 / Luogu 2822 组合数问题 (递推)
CJOJ 2255 [NOIP2016]组合数问题 / Luogu 2822 组合数问题 (递推) Description 组合数\[C^m_n\]表示的是从n个物品中选出m个物品的方案数.举个例子, ...
随机推荐
- MapReduce的序列化机制
MapReduce自己实现了一套序列化机制,通过实现Writable接口, 重写DateInput和DateOutPut方法,实现数据的序列化和反序列化, 相比于JDK自带的序列化,MapReduce ...
- 微信小程序(12)--倒计时
记录一个常见的效果,倒计时. <text>倒计时:{{content}}</text> Page({ /** * 页面的初始数据 */ data: { endTime: '', ...
- vue,一路走来(12)--父与子之间传参
今天想起一直没有记录父组件与子组件的传参问题,这在项目中一直用到. 父向子组件传参 Index.vue父组件中 <component-a :msgfromfa="(positionno ...
- Linux 下源码安装ngnix
版本说明: NGINX 版本1.12.0 pcre-8.40 zlib-1.2.11 openssl-1.1.0i 安装过程 # ./configure --prefix=/usr/ngnix ...
- Git最全总结
一个小时学会Git 目录 一.版本控制概要 工作区 暂存区 本地仓库 远程仓库 1.1.什么是版本控制 1.2.常用术语 1.3.常见的版本控制器 1.4.版本控制分类 1.4.1.本地版本控制 ...
- jenkins持续集成(三): jenkins配置邮件通知
完成基于jenkins的持续集成部署后,任务构建执行完成,测试结果需要通知到相关人员.这篇博客,介绍如何在jenkins中配置邮件通知的方法... 一.安装邮件插件 由于Jenkins自带的邮件功能比 ...
- win10搭建ftp环境
1.进入程序,并点击“启用或关闭windows功能” 2.勾选对应的功能,并点击“确定” 3.进入IIS 4.如下图 5.如图 6.如图 7.如下图 8.创建新用户,用于登录ftp(自行创建) 9.禁 ...
- vue 限制input[type=number]的输入位数策略整理
https://blog.csdn.net/weistin/article/details/79664261 vue type="number 设置maxlength 是无效的 我们可以 ...
- 18.Vim基础指令(自用)——2019年12月13日
title: vim study date: "2018-12-26 20:17:16" tags: 指令学习 categories: 技术驿站 vim study 2018年12 ...
- postgre存储过程或者视图中"::"双冒号是什么意思
双冒号是类型转换的意思. 比如: '2019-09-10'::date