查询成绩

来源:互联网 发布:淘宝运营名词 编辑:程序博客网 时间:2024/04/27 18:56

 

Accepted : 54
Submit : 280Time Limit : 3000 MS
Memory Limit : 65536 KB

题目描述

波波同学是位大四的学生,同时也是一位考研er。为了考上北京邮电大学,他准备了很长时间。不久前,考研成绩终于公布了。波波登陆了成绩查询网站,发现自己密码竟然忘记了!但是幸好,他还记得其中的某些字母。请你判断,他记忆中的字母是否是正确密码的片段。

输入

多组样例,每组样例有两行。第一行为正确密码,第二行为波波记得的密码片段,'*'号表示波波不知道的密码片段,可能任意长,也可能为零。每行不超过110字符,首尾不会出现'*'。

输出

对于每组样例,能得到正确密码的输出yes,不能的输出no。

样例输入

abcdefgab*ffnoeendf*edajfneogbbaj*n*b

样例输出

yesnoyes

#include<iostream>#include<stdio.h>#include<cstring>#include<algorithm>using namespace std;char str[1200],cha[1200],pat[1200],next[1200];int  sta;void get_next( char *word ){    int len = strlen( word );    int k = -1,j = 0; next[0] = -1;    while( j < len )    if( k == -1 || str[k] == str[j] )         next[++j] = ++k;    else k = next[k];}int work( char *word ){    int len = strlen( str );    int let = strlen( word );    int i,k = 0;    for( i = sta; i < len; i++ )    {        while( str[i] != word[k] && next[k] != -1 ) k = next[k];        if( str[i] == word[k] ) k++;        if( k == let )return i+1;    }    return -1;}int main( ){    while( scanf("%s",&str) != EOF )    {       scanf("%s",&cha);       int len = strlen( cha );  cha[len++] = '*';       int k = 0; bool fell = false;  sta = 0;       for( int i = 0; i < len; i++ )       {           if( cha[i] == '*' )           {               if( k == 0 )continue;               pat[k] = '\0';  k = 0;               get_next( pat );sta = work( pat );               if( sta < 0 ){ fell = true;break; }           }           else pat[k++] = cha[i];       }       if( !fell )printf("yes\n");       else       printf("no\n");    }    return 0;}


我的尽然超时。。。0.0
# include<iostream># include<cstring> # include<cstdio> # include<cmath> using namespace std; const int maxn=110+5; char a[maxn]; char s[maxn]; int flag; int main() {     while(scanf("%s%s",&a,&s))     {         flag=0;       for(int i=0,j=0;s[i]!='\0';i++,j++)       {           if(s[i]!=a[j])           {               if( s[i]!='*')               {               cout<<"no"<<endl;flag=1;break;}               else               {                   i++;                   while(s[i]!=a[j]&&s[i]!=a[j+1])                    j++;               }           }       }       if(flag==0)  cout<<"yes"<<endl;       memset(a,'\0',sizeof(a));       memset(s,'\0',sizeof(s));     } }


0 0
原创粉丝点击