杭电2736 Surprising Strings

原创 2015年11月20日 21:17:54

Surprising Strings

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 422    Accepted Submission(s): 290


Problem Description
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.
 

Source
 
最近在测字符串问题,做的很有感觉:
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
char s[110000][3],sh[110];
int i,j,k,l,m,n,ans,num,flag,sum,len;
int ac()
{
	int i,j;
	for(i=0;i<l;i++)
	for(j=i+1;j<l;j++)
	if(strcmp(s[i],s[j])==0)
	return 0;
	return 1;
}
int main()
{
	while(scanf("%s",sh),strcmp(sh,"*\0"))
	{
		flag=0;
		len=strlen(sh);
		if(len<3)
		flag=1;
		for(i=0;i<len-2;i++)
		{
			l=0;
			for(j=0;j+i<len-1;j++)
			{
				s[l][0]=sh[j];
				s[l++][1]=sh[j+i+1];
			}
			if(ac()==0)
			break;
		}
		if(i==len-2)
		flag=1;
		if(flag)
		printf("%s is surprising.\n",sh);
		else
		printf("%s is NOT surprising.\n",sh);
	}
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

杭电题目大致分类

hdu题目大致分类:(详细分类在后)   模拟题, 枚举 1002 1004 1013 1015 1017 1020 1022 1029 1031 1033 1034 1035 1036 103...
  • swanzhu
  • swanzhu
  • 2015年05月23日 17:03
  • 1516

杭电oj题库分类

分类一:   基础题:1000、1001、1004、1005、1008、1012、1013、1014、1017、1019、1021、1028、1029、1032、1037、1040、1048、...
  • zwj1452267376
  • zwj1452267376
  • 2014年12月23日 21:52
  • 1945

杭电ACM2024java做法

C语言合法标识符 Problem Description 输入一个字符串,判断其是否是C的合法标识符。 Input 输入数据包含多个测试实例,数据的第一行是一个整数n,表示测试实例的个...
  • SuperBeauty
  • SuperBeauty
  • 2015年06月11日 10:59
  • 773

杭电acm题目分类 非常详细

按此做成就大神之路:   1002 简单的大数 1003 DP经典问题,最大连续子段和 1004 简单题 1005 找规律(循环点) 1006 感觉有点BT的题,我到现在还没过 1007...
  • lsgqjh
  • lsgqjh
  • 2015年03月13日 17:49
  • 8162

【杭电】[2032]杨辉三角

啊 杨辉三角 感觉这一题值得说说杨辉三角是我进入ACM协会时上机做的一题 据当时学长学姐说是当时在所有题里最难的一题 (所以进协会其实还是挺简单的) 做了这一题其它题就不用做了……‘不过这一...
  • u011493189
  • u011493189
  • 2015年12月20日 12:00
  • 228

杭电ACM题2000遇到的一点问题

今天做了几个杭电的ACM题,包括2000题,题目描述是:输入三个字符后,按各字符的ASCII码从小到大的顺序输出这三个字符。要求输入为:输入数据有多组,每组占一行,有三个字符组成,之间无空格。输出为:...
  • jeffashan
  • jeffashan
  • 2014年12月02日 23:58
  • 1270

杭电ACM——Java版

记录杭电ACM的部分答案,纯手写,如有雷同,算你抄我的。o(∩_∩)o
  • young_kim1
  • young_kim1
  • 2015年04月17日 10:29
  • 1907

杭电ACMC语言版答案,持续更新中~

由于一些原因,最近开始刷题,虽然很多人都说是水题,不过对于我这种很久没碰过C语言的来说,每天一水题还是蛮好玩的,虽然网上应该有很多答案啦,我也是本着记下来印象会深刻一点的想法想把它们保存下来,大家勿喷...
  • ChunyuH
  • ChunyuH
  • 2015年08月19日 09:58
  • 622

最短路(杭电oj2544)(迪杰斯特拉)

最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm...
  • hdd871532887
  • hdd871532887
  • 2014年12月10日 22:53
  • 658

杭电 HDU 1215 七夕节

七夕节 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submis...
  • lsgqjh
  • lsgqjh
  • 2015年04月23日 16:33
  • 960
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:杭电2736 Surprising Strings
举报原因:
原因补充:

(最多只允许输入30个字)