小q的数列(二进制例题)
Posted aiahtwo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小q的数列(二进制例题)相关的知识,希望对你有一定的参考价值。
题目链接:https://ac.nowcoder.com/acm/problem/15979
题目思路:找规律
我们可以发现
f[n]的值就是n转化为二进制中的1的个数
而且f[2^t-1]=t
n<10^18 2^t-1<10^18 t<64
所以f[n]的值不会大于64
另外第一次出现n的值可以通过求f[n]的值t 求出下标2^t-1
#include<bits/stdc++.h> using namespace std; int main() int t; cin>>t; while(t--) long long n,x=0; cin>>n; while(n) //x为二进制n中1的个数 n=n&(n-1); x++; long long num=1; for(int i=0;i<x;i++) num=2*num; cout<<x<<" "<<num-1<<endl;
以上是关于小q的数列(二进制例题)的主要内容,如果未能解决你的问题,请参考以下文章
luoguP3374ybtoj树状数组例题1单点修改区间查询