Codecraft-18 and Codeforces Round #458: C. Travelling Salesman and Sp(组合数)
题意:
对于数字x,令F[x] = x二进制中1的个数
输入两个数字n(输入为二进制)和k,问有多少个满足①<=n;②刚好进行k次F[]计算后变为1
思路:
显然n<=2^1000但是第一次F[]计算之后一定会变成一个<=1000的数
先预处理1到1000每个数要变几次,然后对于刚好变k-1次的数x就相当于求出有多少个数满足
①<=n;②二进制刚好有x个1
这可以用数位DP或者组合数学解决
大概就是如果当前位是1的话把它变成0后面所有数字都可以01任选了,具体看代码
最后对于每个合法的x算出来的情况数全部加在一起就是答案
不过这样有两个坑,一个是k=0是答案一定为1,第二个是k=1时注意计算出的答案要-1
#include<stdio.h>
#include<string.h>
#define LL long long
#define mod 1000000007
int a[1005];
LL C[1005][1005];
char str[1005];
int Jud(int x)
{int now, sum = 0;while(x>1){sum++;now = 0;while(x){if(x%2==1)now++;x /= 2;}x = now;}return sum;
}
LL Sech(int x)
{LL sum = 0;int i, n, cnt = 0;n = strlen(str+1);for(i=1;i<=n;i++){if(str[i]=='1'){if(cnt<=x)sum = (sum+C[n-i][x-cnt])%mod;cnt++;}}if(cnt==x)sum = (sum+1)%mod;return sum;
}
int main(void)
{LL ans;int i, j, k;for(i=1;i<=1000;i++)a[i] = Jud(i);C[0][0] = 1;for(i=1;i<=1000;i++){C[i][0] = 1;for(j=1;j<=i;j++)C[i][j] = (C[i-1][j-1]+C[i-1][j])%mod;}scanf("%s%d", str+1, &k);if(k==0){printf("1\n");return 0;}ans = 0;for(i=1;i<=1000;i++){if(a[i]==k-1)ans = (ans+Sech(i))%mod;}if(k==1)ans--;printf("%I64d\n", ans);return 0;
}
Codecraft-18 and Codeforces Round #458: C. Travelling Salesman and Sp(组合数)相关推荐
- 【Codeforces Round #458 D.Bash and a Tough Math Puzzl】线段树
链接 Codecraft-18 and Codeforces Round #458 (Div. 1 + Div. 2, combined) 题意 给你一个区间,要支持两种区间操作. 第一种操作是单点更 ...
- Codecraft-18 and Codeforces Round #458 (Div. 1 + Div. 2, combined) C. Travelling Salesman and Specia
题目链接:点击打开链接 题目大意:给出一个二进制数m,这个二进制数中1的个数为n,将m转变为n记做操作一次,知道将m转变为1结束,操作的总次数记为m的步长. 现在给出一个数n,和步长k,求小于等于n的 ...
- Codecraft-18 and Codeforces Round #458 (Div. 1 + Div. 2, combined) C】 Travelling Salesman and Specia
数位dp 预处理1-1000中经过刚好经过k-1次变换到1的数. 然后搞一个数位dp, 当limit为false的时候可以在后面用组合数放置1. 要特判k==0(只有1满足)k==1(1不满足要减去) ...
- Codecraft-18 and Codeforces Round #458: D. Bash and a Tough Math Puzzle(线段树)
D. Bash and a Tough Math Puzzle time limit per test 2.5 seconds memory limit per test 256 megabytes ...
- codeforces round div2,3周赛补题计划(从开学到期末)
1. 本学期场次 从2020.09.19-2021.01.18,一共18周. 题号 场次 日期 备注 1475 Codeforces Round #697 (Div. 3) 1.25 1474 Cod ...
- 构造 Codeforces Round #302 (Div. 2) B Sea and Islands
题目传送门 1 /* 2 题意:在n^n的海洋里是否有k块陆地 3 构造算法:按奇偶性来判断,k小于等于所有点数的一半,交叉输出L/S 4 输出完k个L后,之后全部输出S:) 5 5 10 的例子可以 ...
- Codeforces Round #712 Div.2(A ~ F) 超高质量题解(每日训练 Day.15 )
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #712 Div.2(A ~ F) 题解 比赛链接:https:// ...
- Codeforces Round #698 (Div. 2)(A ~ F)6题全,超高质量题解)【每日亿题】2021/2/4
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 [每日亿题]Codeforces Round #698 (Div. 2)(A ~ F)6题全,超 ...
- Codeforces Round #694 (Div. 1 + Div2)(A ~ H,8题全,超高质量题解)【每日亿题】2021/2/1、2/2
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 [每日亿题]Codeforces Round #694 (Div. 1 + Div2)(A ~ ...
最新文章
- [svc]samba服务搭建
- LeetCode Scramble String
- LA4636积木艺术
- 5.6.50 mysql 用什么驱动_日均5亿查询量的京东订单中心,为什么舍弃MySQL用ES?
- 进程间通信------共享内存
- sublime wrong
- jQuery WeUI学习笔记一
- 计算机组成原理第三版第四章,计算机组成原理第四章答案
- cesium实现自定义地球球体背景效果
- 【excel】常用的函数整理
- 客户分段模型(Customer Segmentation Models)
- [spring源码学习]一、IOC简介
- idea为什么不显示运行按钮_idea 右键项目没有run 运行选项
- design pattern scard
- 酷炫cmd命令行工具——windows terminal的详细配置
- 最全总结 | 聊聊 Python 办公自动化之 Word(中)
- VS中C++导入并使用DLL文件使用步骤
- 好程序员Java分享MySQL之SQL入门(一)
- IMS-FACNN(Improved Multi-Scale Convolution Neural Network integrated with a Feature Attention Mecha
- 集音频和视频播放功能于一身的简易播放器
热门文章
- python工资一般多少p-为什么这么多人喜欢Python?Python的就业方向是什么?
- python是干嘛的-python语言是干什么的
- python对于设计师有什么用-《学习PYTHON—做个有编程能力的设计师》
- python编程 从入门到实践-终于懂了python编程从入门到实践
- 学python有前途吗-python有前景吗
- 搭乘百度语音识别技术,录音啦识别率最高可达95%
- 高职考计算机基础知识,高职计算机基础及应用教程
- 移动web-margin塌陷
- 【数据结构和算法笔记】:数据结构概述
- jenkins无法连接仓库:Command “/usr/bin/git ls-remote -h -- https://gitee.com/xxx.git HEAD“ returned