题意:

对于数字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(组合数)相关推荐

  1. 【Codeforces Round #458 D.Bash and a Tough Math Puzzl】线段树

    链接 Codecraft-18 and Codeforces Round #458 (Div. 1 + Div. 2, combined) 题意 给你一个区间,要支持两种区间操作. 第一种操作是单点更 ...

  2. 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的 ...

  3. 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不满足要减去) ...

  4. 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 ...

  5. codeforces round div2,3周赛补题计划(从开学到期末)

    1. 本学期场次 从2020.09.19-2021.01.18,一共18周. 题号 场次 日期 备注 1475 Codeforces Round #697 (Div. 3) 1.25 1474 Cod ...

  6. 构造 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 的例子可以 ...

  7. Codeforces Round #712 Div.2(A ~ F) 超高质量题解(每日训练 Day.15 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #712 Div.2(A ~ F) 题解 比赛链接:https:// ...

  8. Codeforces Round #698 (Div. 2)(A ~ F)6题全,超高质量题解)【每日亿题】2021/2/4

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 [每日亿题]Codeforces Round #698 (Div. 2)(A ~ F)6题全,超 ...

  9. Codeforces Round #694 (Div. 1 + Div2)(A ~ H,8题全,超高质量题解)【每日亿题】2021/2/1、2/2

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 [每日亿题]Codeforces Round #694 (Div. 1 + Div2)(A ~ ...

最新文章

  1. [svc]samba服务搭建
  2. LeetCode Scramble String
  3. LA4636积木艺术
  4. 5.6.50 mysql 用什么驱动_日均5亿查询量的京东订单中心,为什么舍弃MySQL用ES?
  5. 进程间通信------共享内存
  6. sublime wrong
  7. jQuery WeUI学习笔记一
  8. 计算机组成原理第三版第四章,计算机组成原理第四章答案
  9. cesium实现自定义地球球体背景效果
  10. 【excel】常用的函数整理
  11. 客户分段模型(Customer Segmentation Models)
  12. [spring源码学习]一、IOC简介
  13. idea为什么不显示运行按钮_idea 右键项目没有run 运行选项
  14. design pattern scard
  15. 酷炫cmd命令行工具——windows terminal的详细配置
  16. 最全总结 | 聊聊 Python 办公自动化之 Word(中)
  17. VS中C++导入并使用DLL文件使用步骤
  18. 好程序员Java分享MySQL之SQL入门(一)
  19. IMS-FACNN(Improved Multi-Scale Convolution Neural Network integrated with a Feature Attention Mecha
  20. 集音频和视频播放功能于一身的简易播放器

热门文章

  1. python工资一般多少p-为什么这么多人喜欢Python?Python的就业方向是什么?
  2. python是干嘛的-python语言是干什么的
  3. python对于设计师有什么用-《学习PYTHON—做个有编程能力的设计师》
  4. python编程 从入门到实践-终于懂了python编程从入门到实践
  5. 学python有前途吗-python有前景吗
  6. 搭乘百度语音识别技术,录音啦识别率最高可达95%
  7. 高职考计算机基础知识,高职计算机基础及应用教程
  8. 移动web-margin塌陷
  9. 【数据结构和算法笔记】:数据结构概述
  10. jenkins无法连接仓库:Command “/usr/bin/git ls-remote -h -- https://gitee.com/xxx.git HEAD“ returned