链接:https://ac.nowcoder.com/acm/contest/16/D
来源:牛客网
Fancy Signal Translate
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
题目描述
FST是一名可怜的小朋友,他很强,但是经常fst,所以rating一直低迷。
但是重点在于,他真的很强!他发明了一种奇特的加密方式,这种加密方式只有OIer才能破解。
这种加密方式是这样的:对于一个01串,他会构造另一个01串,使得原串是在新串中没有出现过的最短的串。
现在FST已经加密好了一个串,但是他的加密方式有些BUG,导致没出现过的最短的串不止一个,他感觉非常懊恼,所以他希望计算出没出现过的最短的串的长度。
输入描述:
一行,一个01串。长度≤105
输出描述:
一行,一个正整数,表示没有出现过的最短串的长度。
示例1
输入
复制
100010110011101
输出
复制
4
数据有点water
转换为十进制可以对应每一个01字串
#include<bits/stdc++.h>
using namespace std;
const int M = 100005;
int a[M];
bool vis[20*M];
string s;
int count(int x)
{
int ans = 0;
while(x >>= 1) ans++;
return ans + 1;
}
int main()
{
cin >> s;
for(int i = 0; i < s.length(); i++)
for(int j = i, now = 0; j < s.length() && j < i + 13; j++)
{
now = (now << 1) + s[j] - '0';
vis[now] = true;
}
for(int i = 1; i < M; i++)
if(! vis[i])
{
cout << count(i) << endl;
return 0;
}
}