EOJ3040. 非重复二进制串

该博客讨论了一种特殊类型的二进制串——非重复二进制串,即相邻位不相同的二进制串。给定一个正整数,任务是找到其二进制表示中最长的非重复二进制串的长度。博客提供了输入输出格式以及样例,包括问题数量、整数的十进制表示以及对应的结果输出。

单点时限: 2.0 sec

内存限制: 256 MB

对于一个二进制串 b=bkbk-1…b1,如果对任意 i (1≤i≤k-1),满足 bi≠bi+1,那么 b 称为非重复二进制串。给定一个正整数,输出其二进制表示中最长的非重复二进制串的长度。

输入格式

第 1 行:一个整数 T (1≤T≤10) 为问题数。

第 2~T+1 行,每行一个十进制表示的正整数 n,(0<n<231)。

输出格式

对于每个问题,输出一行问题的编号(0 开始编号,格式:case #0: 等),在接下来一行中输出 n 的二进制表示中最长的非重复二进制串的长度(前置 0 不计算在内)。

样例

input

3
7
10
999

output

case #0:
1
case #1:
4
case #2:
2

#include <iostream>
#include <bits/stdc++.h>
#include <math.h>
using namespace std;
class SingleJob {
public:
	bitset<32> bits;
	int len=1;
};
int main() {
	int jobs, temp;	
	SingleJob J[10];
	
	// 输入
	cin >> jobs;
	for(int i = 0; i < jobs; i++) {
		cin >> temp;
		J[i].bits = temp;
	}
	
	// 输出
	for(int i = 0; i < jobs; i++) {
		cout << "case #" << i << ":" << endl;
		int j=31;
		int templen=1;
		while(!J[i].bits[j]) j--;	// located in "first-1"

		for(;j>0;j--){
			if( J[i].bits[j] != J[i].bits[j-1] ){	// is not repeat;
				templen++;                          // then record:length+1;
				J[i].len = max(J[i].len, templen);  // refresh record.
			}
			else{
				templen = 1;
			}
		}
		cout << J[i].len << endl;
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值