列表

详情


NC14270. Fancy Signal Translate

描述

FST是一名可怜的小朋友,他很强,但是经常fst,所以rating一直低迷。
但是重点在于,他真的很强!他发明了一种奇特的加密方式,这种加密方式只有OIer才能破解。
这种加密方式是这样的:对于一个01串,他会构造另一个01串,使得原串是在新串中没有出现过的最短的串。
现在FST已经加密好了一个串,但是他的加密方式有些BUG,导致没出现过的最短的串不止一个,他感觉非常懊恼,所以他希望计算出没出现过的最短的串的长度。

输入描述

一行,一个01串。长度≤105

输出描述

一行,一个正整数,表示没有出现过的最短串的长度。

示例1

输入:

100010110011101

输出:

4

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 175ms, 内存消耗: 1820K, 提交时间: 2020-10-05 21:33:39

#include<set>
#include<iostream>
using namespace std;
int main()
{
	string s;
	cin>>s;
	for(int i=1;;i++){
		
		set<string>book;/*定义set容器  把字符串直接不重复插入*/
		for(int j=0;j+i<=s.size();j++){
			book.insert(s.substr(j,i));/*从 j 到 i 的子串*/ 
		}
		if(book.size()<(1<<i)){/*若是出现不重复*/ 
			cout<<i<<endl;
			break;
		}
	}
	return 0;
}

C++(clang++ 11.0.1) 解法, 执行用时: 182ms, 内存消耗: 1780K, 提交时间: 2022-11-09 20:02:11

#include<bits/stdc++.h>
using namespace std;
int main(){
	string s;
	cin>>s;
	for(int i=1;;i++){
		set<string> q;
		for(int j=0;j+i<s.size();j++){
			q.insert(s.substr(j,i));
		}
		if(q.size()<(1<<i)){
			cout<<i;
			break;
		}
	}
	return 0;
 } 

Python3 解法, 执行用时: 834ms, 内存消耗: 7056K, 提交时间: 2021-10-08 21:00:08

import sys
import itertools
st=sys.stdin.readline()

for i in range(1,len(st)+1):
    for k in itertools.product('01', repeat=i):
        tmp = "".join(k)
        if tmp not in st:
            print(i)
            exit()

上一题