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.
Input
The input consists of one or more nonempty strings of at most 79 uppercase letters, each string on a line by itself, followed by a line containing only an asterisk that signals the end of the input.
Output
For each string of letters, output whether or not it is surprising using the exact output format shown below.
Sample Input
ZGBG
X
EE
AAB
AABA
AABB
BCBABCC
*
Sample Output
ZGBG is surprising.
X is surprising.
EE is surprising.
AAB is surprising.
AABA is surprising.
AABB is NOT surprising.
BCBABCC is NOT surprising.
题意分析:这道题的意思就是给你一个字符串让你确定当两个字符中差距为分别为0,1,2,3…的所有字符串中有没有重复的子串。如果有的话那么这个字符串就不是惊讶的,否则为惊讶的。
AC代码如下:
#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<string.h>
#include<map>
using namespace std;
int main()
{
int n,i,len,flag,j,flag1;
string s1,s2,s;
while(cin>>s)
{
flag=0;
if(s[0]=='*')
break;
len=s.size();
for(i=1;i<len;i++)
{
map<string,int> m;//每种情况考虑完之后容器内的东西清空
for(j=0;j<len-i;j++)
{
s1="";
s1+=s[j];//把当前位字符放到串中
s1+=s[j+i];//把当前字符加上空隙后的字符放到串中
m[s1]++;//最后这个串出现的次数加1
}
map<string,int>::iterator it;
for(it=m.begin();it!=m.end();it++)
{
if((*it).second>1)//如果在间隔为i的所有子串中有重复的字符串则此串就
//不是惊讶的字符串
{
flag=1;
break;
}
}
if(flag==1)
break;
}
if(flag==1)
cout<<s<<" "<<"is NOT surprising."<<endl;
else
cout<<s<<" "<<"is surprising."<<endl;
}
return 0;
}