A.Bobo String Construction
构造
题目大意
给定一个标识01串 ,构造一个长度为 的信息01串 ,使得串 中,串 仅在开头和结尾各出现过一次。(其中 表示字符串连接运算)
解题思路
考虑构造 全为 或
对于特殊情况, 全为 或 ,则使 全为 或 即可
如果 中兼有 和 ,则 显然 中不可能有子串
但对于 ,可能有 的情况出现,导致不满足题设条件//
那么下面感性证明一下两种方案至少有一种成立。
假设对于兼有 和 的 ,在 全为 的情况下出现:
那么构造 全为 即可,反之亦然
于是问题就转化为在 全为 或 的方案中选择一种使得串 仅在开头和结尾各出现过一次
先使 全为 将 去掉首尾一个字符,判断中间有无字串 即可
归纳发现特殊情况也可以用这种方法构造
时间复杂度
数据范围小( ),BF即可
参考程序
void solve()
{
string t;ll n;
cin >> n >> t;
string s;FORLL(i,1,n) s.push_back('1');
string m=t+s+t;m.erase(m.begin());m.pop_back();
if(m.find(t)!=string::npos) FORLL(i,1,n) cout << '0';
else FORLL(i,1,n) cout << '1';
cout << endl;
}