您的位置:首页 > 其它

2013 - ECJTU 暑期训练赛第八场-problem-B

2013-08-13 17:58 399 查看

Surprising Strings

Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other)
Total Submission(s) : 16   Accepted Submission(s) : 9
[align=left]Problem Description[/align]

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.

 

[align=left]Input[/align]

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.

 

[align=left]Output[/align]

For each string of letters, output whether or not it is surprising using the exact output format shown below.

 

[align=left]Sample Input[/align]

ZGBG
X
EE
AAB
AABA
AABB
BCBABCC
*

 

[align=left]Sample Output[/align]

ZGBG is surprising.
X is surprising.
EE is surprising.
AAB is surprising.
AABA is surprising.
AABB is NOT surprising.
BCBABCC is NOT surprising.map容器+暴力直接过AC代码:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<algorithm>
#include<iomanip>
#include<string>
#include<cstring>
using namespace std;
int main()
{
string str;
int i,j,p,n;
while(cin>>str)
{
if(str=="*")
break;
p=0;
n=str.size();
for(i=1;i<n;i++)
{
map<string,int>m;
for(j=0;j<n;j++)
{
string s;
s+=str[j];
if(i+j<n)
{
s+=str[j+i];
if(m[s])
{
cout <<str<<" is NOT surprising." <<endl;
{
p=1;
break;
}
}
m[s]++;
}
}
if(p)
break;
}
if(p)
continue;
else
cout <<str<<" is surprising." <<endl;
}
return 0;
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息