C. Johnny and Another Rating Drop----------------------------思維(找規律)

在這裏插入圖片描述
在這裏插入圖片描述

解析:
找規律
對於這種二進制串算貢獻的,一般我們都要按位處理
我們樣例 n=5來說
000
001
010
011
100
101

第0位對答案的貢獻爲:5 也就是(n)
第1位對答案的貢獻爲:2 也就是(n/2)
第2位對答案的貢獻爲:1 也就是(n/22)

再舉個例子;
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001

第0位對答案的貢獻爲:9 也就是(n)
第1位對答案的貢獻爲:4 也就是(n/2)
第2位對答案的貢獻爲:2 也就是(n/22)
第3位對答案的貢獻爲:1 也就是(n/23)

所以規律就是:
第i位的貢獻位 n/2i
最後累加起來求和即可

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int t;
ll a;
int main()
{
	cin>>t;
	while(t--)
	{
		cin>>a;
		ll p=1;
		ll sum=0;
		while(a)
		{
			sum+=a/1;
			a>>=1;
		}
		cout<<sum<<endl;
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章