Codeforces Round #581 (Div. 2) A. BowWow and the Timetable

题目链接

题目描述:

给一个二进制数字串,设它的十进制表示为 n ,问 1 到 n - 1有多少个 4 的整数次幂

特别傻吊的一个题,模拟进制也可以写,但是模拟进制太low了,换一个思路

首先,如果一个数的二进制是 100000000(开头是1后面全是0)设它是2的k次幂,那么类似于这样的1111111111(全是1)是 2 的 k+1 次幂 - 1

也就是说,它们中的4的整数次幂的个数最多差一个,或者相等

理由:

因为长度一定的二进制数,最多差一倍而已

如果这个数本身是4的整数次幂(即长度是奇数),如果数字串中有多余一个1,那么就可以包含当前的数(10000000这样的),如果后面全是0,则不用 +1 

对于100000这样的如何求4的整数次幂有多少个,直接字符串长度除以2就ok了,因为每隔两位相当于乘以一个4

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

int main()
{
	string s;
	cin >> s;
	int len = s.length();
	int res = 0;
	int f = 0;
	res = len / 2;
	for (int i = 0; i < len; i++)if(s[i] == '1')++f;
	if(f > 1 && len & 1)++res;
	printf("%d", res);
	return 0;
}

 

posted @ 2019-08-21 10:17  correct  阅读(56)  评论(0)    收藏  举报