当前位置: 首页 > article >正文

【菜笔cf刷题日常-1400】C. Johnny and Another Rating Drop(位运算,数学)

链接:Problem - 1362C - Codeforces

题意:给出一个 n ,求出 0 ~ n 在二进制下每相邻两数的不同位数的总和。

思路:先列了几个找了一下规律,取 i 在 0 ~ n 之间,当 i 等于  2^{k} 时,其不同位数等于 k 。

并且可以进一步发现: 2^{k} 之前的总和 = 2^{k-1}之前的总和 + ( k - 1 )。

并且对于任意一位而言,其总和的计算可以在 2^{k}(不同位阶) 之间独立计算。

因此只要预处理一个 k 在1 ~ 63 区间内 2^{k} 之前的总和,随后遍历 n 的每一位是否为 1 ,求得总和。

code:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,t,k,l,r,q,p,x,idx,res,cnt,sum,flag,maxx,minn;
const int N=200010;
const int MOD=1e9+7;
const int INF=0x3f3f3f3f3f3f3f3f;
int a[N],b[N];

int lowbit(int x){
	return x & -x;
}

signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	int sum=0,res=0;
	for(int i=1;i<=63;i++){			
		a[i-1]=res+i;
		res=res*2+i;
	}

	cin>>t;
	while(t--){
		cin>>n;
		int ans=0;
		for(int i=0;i<=62;i++){
			if(lowbit(n>>i)==1){
				ans+=a[i];
			}
		}
		cout<<ans<<"\n";

	}

	return 0;
}



http://www.kler.cn/a/414709.html

相关文章:

  • ClamAV 在 CentOS 的开发版本 `clamav-devel`
  • Linux八股积累与笔记
  • 重塑用户体验!快手电商智能巡检平台的实践与探索
  • OpenCV相机标定与3D重建(7)鱼眼镜头立体校正的函数stereoRectify()的使用
  • Postman定义公共函数
  • controller中的参数注解@Param @RequestParam和@RequestBody的不同
  • 【Git】Git 完全指南:从入门到精通
  • 记录QT5迁移到QT6.8上的一些问题
  • vscode配置
  • 淘宝商品信息获取:Python爬虫技术的实际应用
  • Spring Boot的理解
  • 适用于学校、医院等低压用电场所的智能安全配电装置
  • MacOS SourceTree Git的使用
  • Wordcloud也能生成一个,带html的词云图文件吗??
  • python: generator model using mysql9.0 or postgreSQL 17.0
  • 基于SpringBoot的“财务管理系统”的设计与实现(源码+数据库+文档+PPT)
  • Java基础面试题07:finalize() 方法什么时候被调用?析构函数(finalization)的目的是什么?
  • 【unity】WebSocket 与 EventSource 的区别
  • 状态模式S
  • 0.查找命令
  • 【docker 拉取镜像超时问题】
  • NeurIPS 2024 数据集汇总|覆盖云层去除/化学光谱/歌声音频/自动驾驶/昆虫标本······...
  • AI 声音:数字音频、语音识别、TTS 简介与使用示例
  • 爬虫开发(5)如何写一个CSDN热门榜爬虫小程序
  • 学习日志 --A5rZ
  • git:下载与安装