题目:子串
给出一个正整数n,我们把1…n在k进制下的表示连起来记为s(n,k),例如s(16,16)=123456789ABCDEF10,
s(5,2)=11011100101。现在对于给定的n和字符串t,我们想知道是否存在一个k(2 ≤ k ≤ 16),使得t是s(n,k)的子串。
第一行一个整数n(1 ≤ n ≤ 50,000)。
第二行一个字符串t(长度 ≤ 1,000,000)
“yes"表示存在满足条件的k,否则输出"no”
#include<bits/stdc++.h>
#include<iostream>
#include<string>
using namespace std;
const int N = 2e6 + 10;
char w[19] = { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' };
int Next[N];
void getNext(string s)
{
int i = 0, j = -1;
Next[0] = -1;
while (i < s.size())
{
if (j == -1 || s[i] == s[j])
Next[++i] = ++j;
else j = Next[j];
}
}
bool kmp(string s, string t) //s要查找的串
{
getNext(t);
int i =