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个物品的方案数.举个例子, ...
随机推荐
- 04.Linux系统-Zabbix监控服务安装部署
一.环境准备 操作系统:CentOS_Server_7.5_x64_1804.iso 部署组件:Zabbix 二.操作步骤: Zabbix_Server安装部署 2.0.安装依赖组件 [root@lo ...
- 一、Api
一. private static readonly IList<string> BaseParamKey = new List<string>() { "apiId ...
- ubuntu16.04的一系列安装
1.安装ubuntu https://blog.csdn.net/weixin_40494464/article/details/81010256 2.ubuntu里选择简体中文 https://bl ...
- 第三节:MySQL的调控按钮——启动选项和系统变量
一.命令行上使用启动选项 启动选项的通用格式 --启动选项1[=值1] --启动选项2[=值2] ... --启动选项n[=值n] 禁止TCP/IP链接 略 修改MySQL服务的默认存储引 ...
- java ArrayList的基本使用
package java06; /* 数组的长度是不可以发生改变的 Arraylist 集合的长度可以发生改变 对于ArrayList来说,有一个尖括号<E>代表泛型 泛型:就是装在结合中 ...
- html5 lineTo的使用例子
demo.js function draw(id) { var CANVAS=document.getElementById(id); var context=CANVAS.getContext('2 ...
- 新装ubantu 18.04(自用)
1.下载镜像,制作u盘启动,装机,分区(具体的百度) 2.sudo passwd root 给root用户创建密码 3.解压tar.gz文件 sudo tar -zxvf pycharm.t ...
- Hadoop搭建完全分布式
ubuntu系统下: https://blog.csdn.net/u014636511/article/details/80171002 centos系统下: https://blog.csdn.ne ...
- springmvc中拦截器配置格式
对于springmvc,有两种方式配置拦截器. 一是实现HandlerInterceptor接口,如 public class MyInterceptor1 implements HandlerInt ...
- Linux服务的安装与使用
Spotlight on Unix 监控Linux服务器的安装与使用 详细请看:https://spotlight-on-unix.software.informer.com/download/#do ...