posts - 64, comments - 4, trackbacks - 0, articles - 0

pku_3096

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 <= 2return 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,"*")==0break;

    
if(judge())
        printf(
"%s is surprising.\n",a);
    
else
        printf(
"%s is NOT surprising.\n",a);
    }
    
return 0;
}


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理