习题3-9 子序列 UVa10340

算法竞赛入门经典(第2版)第3章 数组和字符串
习题3-9 子序列 UVa10340
感悟。
1、上网站下载英文原题,仔细阅读,有些疑惑未解,但自觉不影响编程,稍作思考,开始写代码。

2、像吃豆腐一样简单,很快就完成编码,但一测试样例,大量的通不过,开始跟踪代码。

3、便跟踪边写代码,代码写完,题意也就理解得差不多了,提交Runtime error。

4、将数组从1000开到10000,提交Runtime error,将数组从10000开到100000,提交WA。

5、UVa里几乎没有菜题,一次就AC,好难啊。

6、凭自身实力已无法改正WA,有什么遗漏呢?参考http://blog.csdn.net/thudaliangrx/article/details/50699439代码这么短,都能AC。给了很大的信心。

7、无意中想到一组无法测试通过的数据

AAA ABCD

Yes

马上想到问题所在,修改代码,提交AC,眼泪都快掉下来了,太不容易了,尤其是想到无法通过测试的数据。

附上代码

环境Dev-cpp4.9.9.2

#include
#include


char sub[100000],s[100000];
int book[100000];
int main(){
    int sublen,slen;
    int i,j;
    int flag;
    int min;
    while(scanf("%s%s",sub,s)!=EOF){
        sublen=strlen(sub);
        slen=strlen(s);
        memset(book,-1,sizeof(book));


        min=0;
        for(i=0;i             for(j=min;j                 if(sub[i]==s[j]){
                    book[i]=j;
                    min=j+1;//min为当前所用字符的后面一位。WA变为AC,只是修改了min=j;变为min=j+1; 
                    break;
                }
            }
        }
        
        flag=1;
        for(i=0;i             if(book[i]==-1){//没找到该字符 
                flag=0;
                break;
            }
        }
                
        if(flag)
            printf("Yes\n");
        else
            printf("No\n");
    }
    return 0;
}

你可能感兴趣的:(数组和字符串,入门经典,刘汝佳,NOIP,算法竞赛,子序列)