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

被折叠的 条评论
为什么被折叠?



