Posted on 2010-08-27 15:39
acronix 阅读(215)
评论(0) 编辑 收藏 引用 所属分类:
qqy解题报告
//special thanks to : http://hi.baidu.com/elliott_hdu/blog/item/9841f0a8c8b004b4cb130cf3.html
//考察点: 字符串的处理
//思路: 要求判定题目中描述的 surprising string . 用到了一个类似枚举的方法 按照题意直接模拟解决问题
//收获: 学习到了一种记忆以前状态的方法 做成数组的方式来判定是不是在枚举的过程中曾经出现过.
//经验: 类似字符串处理的题目经常跟下标的确定有很大的关系, 往往数组的下标可以造成很大的差异 并且枚举数据的时候边界也很不好确定. 这些都需要在写程序之前想好.
//ACcode:
#include<stdio.h>
#include<string.h>
#include<memory.h>
char a[80];
int rec[30][30];
bool judge()
{
int len,i,j;
len = strlen(a);
if(len <= 2) return true;
memset(rec,-1,sizeof(rec));
for(i=0;i<=len-2;i++) //枚举从长度0一直到len-2 这是根据题目的意思 联系KMP算法 第一层的时候也是枚举 长度
for(j=0;j<len-i-1;j++) //这里是总长度去掉 枚举出的长度i 也就是 len-i-2(长度i的边界的两个数字(不包含在长度i中))+1 = len-i-1;
{
if(rec[a[j]-'A'][a[j+i+1]-'A'] == i) return false;
else rec[a[j]-'A'][a[j+i+1]-'A'] = i;
}
return true;
}
int main()
{
//freopen("pku_3096_in.txt","r",stdin);
while(scanf("%s",a))
{
if(strcmp(a,"*")==0) break;
if(judge())
printf("%s is surprising.\n",a);
else
printf("%s is NOT surprising.\n",a);
}
return 0;
}