hdu5414

这道题在原先的想法上经过一定的优化就可以过了,但是经过优化后,一直wr,经过一个多小时的抗争,终于明白sbn只要>=tbn就可以了,不一定要严格等于。(sbn,tbn的含义可在代码中找到)

参考来源:http://blog.csdn.net/wangcong9614/article/details/47809239

2015.8.29:

又再推了一遍,其实不难,关键是可能已经做过一遍了吧,希望下次可以装装的说:“这道题呀?虽然我没做过,但是简单,看一眼就成。”容我做会儿白日梦。

原先的代码(超时):

#include
#include
#include
using namespace std;
#define N 100010
#define M 26
#define INF 0x3f3f3f3f

char s[N];
char t[N];
int loca[M];
int aloca[M];

int main(){
    int cas;
    int win;

    scanf("%d\n",&cas);
    while(cas--){
        scanf("%s",s);
        scanf("%s",t);

        memset(loca,-1,sizeof(loca));
        for(int i=0;t[i]!='\0';i++){
            int tempch=t[i]-'a';
            if(loca[tempch]==-1){
                loca[tempch]=i;
            }
        }

        for(int i=0;iloca[temp]){
                        win=0;
                        break;
                    }
                }
            }
        }

        if(win==1){
            if(t[j]=='\0'&&s[i]!='\0'){
                win=0;
            }
            else if(t[j]!='\0'&&s[i]=='\0'){
                for(;t[j]=='\0'||t[j]!=s[i-1];j++){
                    int tempch=s[i-1]-'a';
                    if(aloca[tempch]>loca[tempch]){
                        win=0;
                        break;
                    }
                }
            }
        }

        if(win==0){
            printf("No\n");
        }
        else{
            printf("Yes\n");
        }
    }

    return 0;
}

过了的代码:

#include
#include
#include
using namespace std;
#define N 1000100

char sa[N];
char ta[N];

int main(){
    int t;

    scanf("%d",&t);
    while(t--){
        scanf("%s",sa);
        scanf("%s",ta);

        int i,j;
        for(i=0,j=0;sa[i]!='\0'&&ta[j]!='\0';j++){
            if(sa[i]==ta[j]){
                i++;
            }
        }
        if(sa[i]!='\0'){
            printf("No\n");
        }
        else{
            char sb=sa[0];
            char tb=ta[0];
            int sbn=1;
            int tbn=1;
            for(int i=1;sa[i]!='\0';i++){
                if(sa[i]==sa[i-1]){
                    sbn++;
                }
                else{
                    break;
                }
            }
            for(int i=1;ta[i]!='\0';i++){
                if(ta[i]==ta[i-1]){
                    tbn++;
                }
                else{
                    break;
                }
            }

            if(sb==tb&&sbn>=tbn){
                //printf("%d %d\n",sbn,tbn);
                printf("Yes\n");
            }
            else{
                printf("No\n");
            }
            /*int flag=0;
            int j;
            for(j=1;ta[j]!='\0';j++)
            {
                if(ta[j]==ta[j-1])
                    continue;
                else
                    break;
            }
            for(int i=0;i


转载于:https://www.cnblogs.com/ahahah/p/4918218.html

你可能感兴趣的:(hdu5414)