码迷,mamicode.com
首页 > 其他好文 > 详细

UVALive - 5844

时间:2015-08-15 22:55:06      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:

题是pdf版

Sample Input
2
3
mississippi
nni55i55ippi
2
foobar
|=o08ar
Sample Output
1
0

/**
    题意:给出一个normal串,一个leet串,看能否符合关系的映射
    做法:dfs 将两个串进行匹配注意初始化
**/
#include <iostream>
#include <string.h>
#include <stdio.h>
#include  <cmath>
#include <algorithm>
#define maxn 110
using namespace std;
char ch[maxn];
char ch1[maxn];
char alp[30][10];
char c[10];
int dfs(int k,int a,int b,int len,int len1)
{
    if(a == len && b == len1) return 1;
    if(a == len || b == len1) return 0;
    for(int i=0; i<k; i++)
    {
        if(b+i<len1)
        {
            memset(c,\0,sizeof(c));
            for(int j=0; j<=i; j++)
            {
                c[j] = ch1[b+j];
            }
            bool isok = false;
            if(strcmp(alp[ch[a]-a],"") == 0)  ///当前字母还没有匹配
            {
                isok = true;
                strcpy(alp[ch[a]-a],c);
            }
            if(isok || (strcmp(alp[ch[a]-a] ,c) == 0))
            {
                if(dfs(k,a+1,b+i+1,len,len1)) return 1;
            }
            if(isok)
            {
                strcpy(alp[ch[a]-a],""); ///回溯
            }
        }
    }
    return 0;
}
int main()
{
   // freopen("in1.txt","r",stdin);
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int k;
        scanf("%d",&k);
        memset(alp,\0,sizeof(alp));
        scanf("%s %s",ch,ch1);
        int len = strlen(ch);
        int len1 = strlen(ch1);
        int tt = 0;

        tt = dfs(k,0,0,len,len1);
        printf("%d\n",tt);
    }
    return 0;
}

 

UVALive - 5844

标签:

原文地址:http://www.cnblogs.com/chenyang920/p/4733177.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!