hdu5414

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

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

2015.8.29:

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

原先的代码(超时):

#include<stdio.h>
#include<string.h>
#include<iostream>
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;i<M;i++){
            aloca[i]=INF;
            for(int j=0;j<M;j++){
                if(j==i){
                    continue;
                }
                else{
                    if(loca[j]!=-1&&loca[j]<aloca[i]){
                        aloca[i]=loca[j];
                    }
                }
            }
        }

        //for(int i=0;i<M;i++){
          //  printf("%d\n",loca[i]);
        //}

        if(s[0]!=t[0]){
            printf("No\n");
            continue;
        }

        win=1;
        int i,j;
        for(i=1,j=1;t[j]!='\0'&&s[i]!='\0';j++){
            if(s[i]==t[j]){
                i++;
                continue;
            }
            else{
                if(t[j]==s[i-1]){
                    int temp=t[j]-'a';
                    if(aloca[temp]>loca[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<stdio.h>
#include<string.h>
#include<iostream>
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<j;i++)
            {
                if(sa[i]!=ta[0])
                {
                    flag=1;
                    break;
                }
            }

            if(flag==1){
                printf("No\n");
            }
            else{
                if(sbn<tbn||sa[0]!=ta[0]){
                    printf("%d\n",1/0);
                }
                printf("Yes\n");
            }*/
        }
    }

    return 0;
}


posted @ 2015-08-21 19:58  buzhidaohahaha  阅读(180)  评论(0编辑  收藏  举报