#include<stdio.h>
#include <iostream>
#include <string>
#include <algorithm>
//#include <stdlib.h>
#include <sstream>
using namespace std;
void zh(int &k,string &s,int &n)
{
string s1;
if(k==10)
{
stringstream st;
for(int i=1;i<=n;i++)
{
//s1="";
st<<i;
}
s=st.str();
//cout<<s<<endl;
}
else
{
for(int i=1;i<=n;i++)
{
s1="";
int j=0;
int z=i;
while(1)
{
if(k>10&&z%k>=10)
s1+=('A'+(z%k-10));
else
s1+=(z%k+'0');
z/=k;
j++;
if(!z)
break;
}
reverse(s1.begin(),s1.end());
s+=s1;
}
}
}
void Next(string &t,int next[])
{
int i=0,j=-1;
next[0]=-1;
while(i<t.size())
{
if(j==-1||t[i]==t[j])
{
i++;
j++;
next[i]=j;
}
else
j=next[j];
}
}
int kmp(string &s,string &t)
{
int next[1000005]={0};
Next(t,next);
int i=0,j=0;
while(i<s.size()&&j<t.size())
{
if(j==-1||s[i]==t[j])
{
i++;
j++;
}
else
j=next[j];
}
if(j>=t.size()) return 1;//return (i-t.size());
else return -1;
}
int main()
{
int n;
string t;
string s;
cin>>n;
getline(cin,t);
int f=0;
for(int i=2;i<=16;i++)
{
s="";
zh(i,s,n);
//cout<<s<<endl;
int b=kmp(s,t);
//cout<<b<<endl;
if(b!=-1)
{
printf("yes\n");
f=1;
break;
}
}
if(f==0)
printf("no\n");
return 0;
}为什么过不了所有样例?
全部评论
(0) 回帖