首页 > 其他分享 >P8764 [蓝桥杯 2021 国 BC] 二进制问题

P8764 [蓝桥杯 2021 国 BC] 二进制问题

时间:2024-03-30 18:56:40浏览次数:30  
标签:P8764 cnt BC ll 蓝桥 while ans

原题链接

题解

1.如果数字为 \(100110101\)
那么答案为 \(000000000\) ~ \(011111111\) 中,k个1的组合数 + \(100000000\) ~ \(100011111\) 中k-1个1的组合数 +...+ \(1010101...\) (有k个1) 中0个1的组合数,也就是1
当遇见当遇见k个1 后就可以退出了,最后判断数的1的个数够不够k,如果够,就把最后那个1加上

code

#include<bits/stdc++.h>
using namespace std;

#define ll long long

inline void read(ll &x) {
    x = 0;
    ll flag = 1;
    char c = getchar();
    while(c < '0' || c > '9'){
        if(c == '-') flag = -1;
        c = getchar();
    }
    while(c >= '0' && c <= '9') {
        x = (x << 3) + (x << 1) + (c ^ 48);
        c = getchar();
    }
    x *= flag;
}

inline void write(ll x)
{
    if(x < 0){
        putchar('-');
        x = -x;
    }
    if(x > 9)
        write(x / 10);
    putchar(x % 10 + '0');
}

ll C(ll a, ll b)
{
    b = min(b, a - b);
    ll sum = 1;
    for(ll i = 1; i <= b; i++) sum = sum * (a - i + 1) / i;
    return sum;
}

int main()
{
    ll n, k;
    read(n); read(k);
    vector<ll> a;
    ll one=0;
    while(n)
    {
        a.push_back(n % 2);
        one+=n%2;
        n /= 2;
    }

    ll ans = 0, cnt = 0;
    for(ll i = a.size() - 1; i >= 0; i--)
    {
        if(i < k - cnt||cnt==k) break;
        if(a[i] == 1)
        {
            ans += C(i, k - cnt);
            cnt++;
        }
    }

    write(ans+(one>=k));
    return 0;
}

标签:P8764,cnt,BC,ll,蓝桥,while,ans
From: https://www.cnblogs.com/pure4knowledge/p/18105864

相关文章

  • 2024 蓝桥打卡Day26
    CCFCSP算法练习202212-1现值计算202212-2训练计划202209-1如此编码202209-2何以包邮?202206-1归一化处理202206-2寻宝!大冒险!202203-1未初始化警告202203-2出行计划202112-1序列查询202112-2序列查询新解......
  • 数字游戏(蓝桥杯历届真题)
    ##题目描述栋栋正在和同学们玩一个数字游戏。游戏的规则是这样的:栋栋和同学们一共n个人围坐在一圈。栋栋首先说出数字1。接下来,坐在栋栋左手边的同学要说下一个数字2。再下面的一个同学要从上一个同学说的数字往下数两个数说出来,也就是说4。下一个同学要往下数三个数,说7。依......
  • java Web洗衣店管理系统用eclipse定制开发mysql数据库BS模式java编程jdbc
    一、源码特点   JSP洗衣店管理系统是一套完善的web设计系统,对理解JSPjava编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,eclipse开发,数据库为Mysql5.0,使用java语言开发。javaWeb洗衣店管理系统二、功能介绍(......
  • java Web 疫苗预约管理系统用eclipse定制开发mysql数据库BS模式java编程jdbc
    一、源码特点   JSP疫苗预约管理系统是一套完善的web设计系统,对理解JSPjava编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,eclipse开发,数据库为Mysql5.0,使用java语言开发。javaWeb疫苗预约管理系统二、功能介......
  • driver-class-name: com.mysql.jdbc.Driver爆红解决方式
    目录问题解决方式一:手动添加mysql的jar包问题问题:在springboot项目工程中想要进行数据库配置,在application.yml中添加以下代码:#数据库配置spring:datasource:driver-class-name:com.mysql.cj.jdbc.Driverusername:root#你本地的数据库用户名password......
  • 备战蓝桥杯第三模块之二分模版+二分练题
    前言因本系列是为了蓝桥杯前几天快速过知识点所准备,所以有些部分会很简洁模版整数二分intMid(inta,intb){intl=1;intr=1e9+10;while(l<r){intmid=l+r>>2;if(a/mid<=b)//这儿一般情况下看需要用mid判断什么条件r=mid;elsel=......
  • 备战蓝桥杯第四模块之贪心
    前言本系列只是为了蓝桥杯前几天快速过一遍知识思路遇到贪心想想哪一种方案是最优解。需不需要排序区间选点题目数轴上有n个闭区间,取尽量少的点,使得每一个区间都至少有一个点思路1.优先选择那些终点较早的区间(右端点从小到大排序)2.逐一分析每一段区间是否包含点,如果......
  • NO12 蓝桥杯单片机之DS1302的使用
    1DS1302是什么DS1302由两块存储器组成,一个是日历时钟寄存器还有一个是31位的静态RAM存储器。而在蓝桥杯中常考的就是日历时钟寄存器,故这里只介绍日历时钟寄存器。简单来说,其就是一个“电子表”,他会自动的实时记录时间,而不需要像我们之前运用定时器做的时钟一样,要自己来设计......
  • 蓝桥杯嵌入式之AT24C02各种数据的读写
    一、1字节8为的读写u8a=10;u8temp;eeprom_write(0x00,a); temp=eeprom_read(0x00); sprintf(text,"  temp=%d ",temp);      LCD_DisplayStringLine(Line1,(u8*)text);      memset(text,'\0',strlen(text));二、对于uint16_t、int16_t......
  • 蓝桥杯 试题 基础练习 数列特征
    问题描述给出n个数,找出这n个数的最大值,最小值,和。输入格式第一行为整数n,表示数的个数。第二行有n个数,为给定的n个数,每个数的绝对值都小于10000。输出格式输出三行,每行一个整数。第一行表示这些数中的最大值,第二行表示这些数中的最小值,第三行表示这些数的和。样例输入5......