本题正解:递归
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<map>
using namespace std;
map<string,int>a;
string s1;
int dfs(string s)
{
if(a[s]!=0)
return a[s];
int ans=0,len=s.size();
string q,z,qd,d,e,f;
for(int i=0; (i+1)*2<len; i++)
{
q=s.substr(0,i+1);
z=s.substr(i+1,i+1);
qd=s.substr(len-i-1,i+1);
d=s.substr(len-i-i-2,i+1);
e=s.substr(i+1,len-i-1);
f=s.substr(0,len-i-1);
if(q==z)
ans+=dfs(e);
if(q==qd)
ans+=dfs(e);
if(qd==q)
ans+=dfs(f);
if(qd==d)
ans+=dfs(f);
}
if(len>=2)
ans++;
ans=ans%2014;
a[s]=ans;
return ans;
}
int main()
{
freopen("scode.in","r",stdin);
freopen("scode.out","w",stdout);
cin>>s1;
cout<<dfs(s1)-1;
return 0;
}