首页 > 其他分享 >0和1的熟练

0和1的熟练

时间:2024-06-23 11:58:51浏览次数:16  
标签:log2 int bl 打表 5e5 quad 熟练

$\quad $ 想不出来了,遂打表。
$\quad $ 受到了luobotianle的启发,就依据其建议学上了分块打表。

0与1的熟练
$\quad $ 问 \(L\) 到 \(R\) 之间,在二进制表示下(无前导\(0\)),\(0\) 的个数比 \(1\) 的个数多的数的个数。
$\quad $ 那么我们就可以以 \(5e5\) 为块长来打表。

打表程序
#define yhl 0
#include<bits/stdc++.h>
using namespace std;
const int N=32,p=5e5;
bitset<N>bit;
int l,r,ans,ansl=0,cntl=0;
int main(){
	freopen("biao.out","w",stdout);
	for(register int i=1;i<=2e9;i=-~i){
		bit=i;int cnt=0;
		int le=ceil(log2(i))+(ceil(log2(i))==log2(i));
		for(int j=0;j<=le-1;j=-~j)if(bit[j]&&((++cnt)<<1>le))break;
		if((cnt<<1)<=le)ans++;
		if(!(i%p)){
			printf("%d,",ans-ansl),ansl=ans;
			if(++cntl==40)putchar('\n'),cntl=0;//每40个数换行,方便观看。 
		}
	}
    return yhl;
}
#define yhl 0
#include"bits/stdc++.h"
using namespace std;
const int N=5e5;
bitset<33>bit;
int biao[4005]={
	//此处省略100行打表代码 
};
int l,r,ans;
bool check(int x){
	if(!x)return 0;
	int le=ceil(log2(x))+(ceil(log2(x))==log2(x));
	bit=x;int cnt=0;
	for(int i=0;i<le;i++)if(!bit[i])cnt++;
	return ((cnt<<1)>=le);
}
int main(){
	scanf("%d%d",&l,&r);
	int bl=(l-1)/N+1,br=(r-1)/N+1;
	if(bl^br){
		for(int j=bl+1;j<=br-1;j++)ans+=biao[j];
		for(int j=l;j<=bl*N;j++)ans+=check(j);
		for(int j=br*N-N+1;j<=r;j++)ans+=check(j);
	}else for(int i=l;i<=r;i++)ans+=check(i);
	printf("%d",ans);
	return yhl; 
}

标签:log2,int,bl,打表,5e5,quad,熟练
From: https://www.cnblogs.com/0shadow0/p/18263217

相关文章

  • 【面向就业的Linux基础】从入门到熟练,探索Linux的秘密(三)-shell语法
    主要通过讲解shell中的一些基本语法,可以当作日常的笔记来进行查询和记忆。文章目录前言一、shell二、shell语法1.运行方式2.注释3.变量4.默认变量 5.数组 总结前言主要通过讲解shell中的一些基本语法,可以当作日常的笔记来进行查询和记忆。提示:以下是本篇......
  • 成为黑客第一步,从熟练掌握运维常见的工具开始
    文章目录前言一、开发工具二、自动化构建和测试三、持续集成&交付四、部署工具五、维护六、监控,警告&分析前言开源的工具是大家梦寐以求的。这里列举了多款最棒的开源工具,可以很好的实行DevOps一、开发工具版本控制&协作开发01版本控制系统GitGit是一个开源的分......
  • 目前最流行、需要熟练掌握的技术栈及一些优秀的开源项目推荐
    作为中高级.NET程序员,掌握全面且最新的技术栈对于提升职业竞争力至关重要。以下是目前最流行、需要熟练掌握的技术栈及一些优秀的开源项目推荐:1..NETCore/.NET5+技术栈:ASP.NETCoreEntityFrameworkCoreBlazorgRPCSignalR开源项目:OrchardCore-模块化、多租......
  • Master ABP Framework(熟练掌握 ABP 框架)
    前言ABP框架是一个完整的基础框架,用于通过遵循软件开发的最佳实践和惯例来创建现代Web应用程序。ABP提供了一个高级框架和生态系统,以帮助您实施“不要重复自己”(DRY)原则并专注于您的业务代码。本书由ABP框架的创建者撰写,将帮助您从头开始全面了解ABP框架和现代Web应用程序开发......
  • IDEA快捷键——IDEA熟练操作必备
    智能补全:Ctrl+Shift+Space自我修复:Alt+Enter重构一切:Ctrl+Shift+Alt+T创造万物:Alt+Insert自动完成:Ctrl+Shift+Enter无处藏身:Shift+Shift发号施令:Ctrl+Shift+A代码生成:Template/Postfix+Tab选你所想:Ctrl+W切来切去:Ctrl+Tab字符串格式切换:Alt+Shift+U代码提示:CTRL+空格快捷......
  • 《无双大蛇魔王再临》远吕志章三方原详细熟练度及武器情报
    转载自游民星空,方便自己看,侵删原作者:windy0429首先开场往右下寨击破[不破光治]→接着移动到中央下方出现伏兵[佐佐成政(300经).柴田胜定.津田信春]→再往左中央移动出现伏兵[泷川一益(300经).明智秀满.伊势贞兴]→往上攻取兵粮库[明智光秀(武器盒).稻叶一铁.氏家卜全]&伏......
  • 【Linux终端探险】:从入门到熟练,玩转基础命令的秘密(一)
    文章目录......
  • 熟练运用MongoDB
    目录1.复制集与高可用性1.1.复制集的概念与组成1.2.创建与配置复制集1.3.复制集的自动故障转移与恢复2.分片集群与水平扩展2.1.分片集群的架构与原理2.2.分片键的选择与分片策略2.3.扩展集群规模与负载均衡2.4.创建分片集群3.MongoDB性能调优与监控3.1.监控Mong......
  • 高级前端开发工程师必须要熟练掌握的数组知识
    昨天分享了对象相关的基础知识,今天我们来了解一下JavaScript中另外一个非常重要的数据类型— 数组。1. 什么是数组数组是一种数据结构,用于存储和组织一组相关的元素。在编程中,数组提供了一个有效的方式来处理大量相似或相关的数据。每个值在数组中都有一个唯一的索引......
  • 熟练使用有棱有角的内存
    指针,是用于存储内存地址的变量,定义指针时,需要在变量名前加上*,这表示从指针存储的地址中一次能够读写的数据字节数组,在内存中是连续存放的,他与内存的物理构造是一样的所以说数组是高效使用内存的基础。索引和内存地址的变化工作是由编译器自动实现的栈和队列,区别在于数据出入的......