poj 2192 Zipper

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<algorithm>
using namespace std;
char str1[210];
int num1;
char str2[210];
int num2;
char ans[500];
int num;
bool d[210][210];
int main()
{
    int np=1;
    int i,j;
    int n;
    scanf("%d",&n);
    getchar();
    while(n--)
    {
        scanf("%s %s %s",str1,str2,ans);
        getchar();
        num1=strlen(str1);
        num2=strlen(str2);
        num=strlen(ans);
        memset(d,false,sizeof(d));
        d[0][0]=true;
        for(i=1;i<=num1;i++)
        {
            d[i][0]=(d[i-1][0])&&(str1[i-1]==ans[i-1]);
        }
        for(i=1;i<=num2;i++)
        {
            d[0][i]=(d[0][i-1])&&(str2[i-1]==ans[i-1]);
        }
        for(i=1;i<=num1;i++)
        {
            for(j=1;j<=num2;j++)
            {
                d[i][j]=d[i-1][j]&&(str1[i-1]==ans[i+j-1]);
                if(d[i][j])
                {
                    continue;
                }
                d[i][j]=d[i][j-1]&&(str2[j-1]==ans[i+j-1]);
            }
        }
        if(d[num1][num2])
        {
            printf("Data set %d: yes\n",np++);
            continue;
        }
        printf("Data set %d: no\n",np++);
    }
    return 0;
}
posted @ 2012-08-06 20:36  willzhang  阅读(150)  评论(0编辑  收藏  举报