The D-pairs of a string of letters are the ordered pairs of letters that are distance D from each other. A string is D-unique if all of its D-pairs are different. A string is surprising if it is D-unique for every possible distance D.
Consider the string ZGBG. Its 0-pairs are ZG, GB, and BG. Since these three pairs are all different, ZGBG is 0-unique. Similarly, the 1-pairs of ZGBG are ZB and GG, and since these two pairs are different, ZGBG is 1-unique. Finally, the only 2-pair of ZGBG is ZG, so ZGBG is 2-unique. Thus ZGBG is surprising. (Note that the fact that ZG is both a 0-pair and a 2-pair of ZGBG is irrelevant, because 0 and 2 are different distances.)
Acknowledgement: This problem is inspired by the "Puzzling Adventures" column in the December 2003 issue of Scientific American.
ZGBG X EE AAB AABA AABB BCBABCC *
ZGBG is surprising. X is surprising. EE is surprising. AAB is surprising. AABA is surprising. AABB is NOT surprising. BCBABCC is NOT surprising.
/*
最多有79个字母,样例数不超过1200个
*/
#include <iostream>
#include <cstdio>
#include <map>
#include <cstring>
#include <string>
using namespace std;
map <string,int> ph;
//长度为len的话,只需枚举到长度len-2
int main()
{
char A[88];
while(cin>>A&&A[0]!='*')
{
bool flag=true;
int len=strlen(A);
for(int i=0;i<=len-2;i++)
{
ph.clear();
for(int j=0;j<len-i;j++)
{
string a;
a.push_back(A[j]);
a.push_back(A[j+i+1]);
if(!ph[a])
{
ph[a]=1;
}
else
{
flag=false;
goto L;
}
}
}
L:
if(flag)
{
cout<<A<<" is surprising."<<endl;
}
else cout<<A<<" is NOT surprising."<<endl;
}
return 0;
}