Skip Letter Code

翻译 2015年11月19日 21:04:12

Description

Romeo and Juliet are college students in the city of Verona and are in love with each other. Unfortunately, both their families are not very glad with this fact. They are trying to prevent any attempts of young people to communicate. Thus, Romeo and Juliet had to introduce their special code to be capable of writing love letters to each other. Both of them have a little book of Shakespeare sonnets and agreed to use this book as a dictionary for their code. The code is like follows: only words that appear in the dictionary may be used in the love letter. Then, the person who writes the letter may skip some letters in each word. Of course that person tries to skip as may letters as possible, but he would keep in mind that the letter should be decoded with just one possibility for each word. Oh, such a difficult task! Fortunately, both of the lovers have a personal computer and you can (can't you?) help them writing the program, that being given with the dictionary and the coded message decodes one if there is just one way to decode the message or reports that there could be more than one decoding possibility. Thus, you will help both writing and reading persons.


This problem contains multiple test cases!

The first line of a multiple input is an integer N, then a blank line followed by N input blocks. Each input block is in the format indicated in the problem description. There is a blank line between input blocks.

The output format consists of N output blocks. There is a blank line between output blocks.


Input



First line of the input contains single integer 1 <= N <= 100 - number of words in a dictionary. Next N lines each contain one word from the dictionary. Each word in a dictionary is not longer than 5 characters and (as well as coded message) consists from capital letters A to Z. The rest of file (up to # character) contains coded message (no longer than 10^6 characters) which is coded words separated by space(s) and/or newline characters.


Output



Output should contain single line with word AMBIGUITY if there could be more than one possible decoding of the message or decoded message with all spaces and newline characters kept intact. Note, that # character should not be printed.


Sample Input



2

3
I
LOVE
YOU
I E
U#

3
I
LOVE
YOU
I O
Y#


Sample Output

I LOVE
YOU

AMBIGUITY


这道题是需要你将一个连续的字符串进行解码,注意是连续的,而且是有顺序的,如果对应编码中有

多个答案那么就输出AMBIGUITY,所以需要映射是唯一的才行,可以用组合将编码的所有可能列举出

来,然后采用map存储位置,这样后面就只需要查询了。

#include <stdio.h>
#include <string.h>
#include <string>
#include <map>
#include <iostream>
using namespace std;
map < string, int > vis;
const int N = 105, maxn = 1000005;
char word[N][N], op[N], ans[maxn];
int s, len;
void dfs ( int k, string str, int n, int pos )
{
    if ( k > n || len-pos < n-k )   //剪枝
        return ;
    if ( k == n )
    {
        if ( vis[str] == 0 || vis[str] == s )
        //如果里面没数或者相等就赋值
            vis[str] = s;
        else    //否则变成-1表示有多种可能
            vis[str] = -1;
        return ;
    }
    for ( int i = pos; i < len; i ++ )  //组合数要从i+1开始
        dfs ( k+1, str+word[s][i], n, i+1 );
}
int is_letter ( char ch )
{
    return ch >= 'A' && ch <= 'Z' || ch >= 'a' && ch <= 'z';
}
int main ( )
{
    int T, n, tag, cnt;
    //freopen ( "in0.in", "r", stdin );
    scanf ( "%d", &T );
    string str;
    while ( T -- )
    {
        tag = 0;
        vis.clear ( );
        scanf ( "%d", &n );
        for ( int i = 1; i <= n; i ++ )
            scanf ( "%s", word[i] );
        for ( int i = 1; i <= n; i ++ )
        {
            str = "";
            len = strlen ( word[i] );
            for ( int j = 1; j <= len; j ++ )   //使用编码的长度
            {
                s = i;
                dfs ( 0, str, j, 0 );
            }
        }
        getchar ( );
        strcpy ( ans, "" );
        cnt = 0;
        while ( gets ( op ) )
        {
            int size = strlen ( op );
            if ( tag )
            {
                if ( op[size-1] == '#' )
                    break ;
                continue ;
            }
            for ( int i = 0; i < size; i ++ )
            {
                string ch = "";
                if ( is_letter ( op[i] ) )
                {
                    while ( is_letter ( op[i] ) )
                    {
                        ch = ch+op[i];
                        i ++;
                    }
                    i --;
                    if ( vis[ch] == -1 || vis[ch] == 0 )
                        tag = 1;
                    else
                    {   int pos = vis[ch];
                        int l = strlen ( word[pos] );
                        for ( int i = 0; i < l; i ++ )
                            ans[cnt ++] = word[pos][i];
                    }
                }
                else if ( op[i] != '#' )
                    ans[cnt ++] = op[i];
            }
            ans[cnt ++] = '\n'; //注意在后面加换行
            ans[cnt] = '\0';
            if ( op[size-1] == '#' )
                break ;
        }
        printf ( "%s", tag ? "AMBIGUITY\n" : ans );
        if ( T )    //两组数据中有一个换行
            printf ( "\n" );
    }
    return 0;
}


投稿时Cover Letter的重要性

今天上午投出去两篇文章分别到AJE和AJPH,第一篇我是一作,而两篇导师都是通讯作者。跟每次投稿一样,导师事先都准备好一封Cover Letter,提交的时候上传。以前跟其他导师一起提交文章的时候,很...
  • liyanzhong
  • liyanzhong
  • 2016年01月09日 14:38
  • 2837

论文返修(response letter)一些很有用的套话

提示:请点击标题下方蓝色“实验万事屋”,添加关注后,发“嗯”可以查看我们之前的文章。 总结了一部分万能的套话,足以体现我们对杂志社编辑和审稿人的尊重。 1、Accordin...
  • GarfieldEr007
  • GarfieldEr007
  • 2016年07月31日 20:58
  • 3982

SCI/EI期刊投稿ReplyLetter常用格式总结

SCI/EI期刊投稿ReplyLetter常用格式总结 1. ReplyLet
  • angl129
  • angl129
  • 2014年11月17日 16:51
  • 2011

论文类型Journal、magazin、transaction、letter等的区别

论文类型Journal、magazin、transaction、letter等的区别
  • ztguang
  • ztguang
  • 2017年08月05日 16:35
  • 283

SCI 投稿Cover letter模板大全

一、第一次投稿Cover letter:主要任务是介绍文章主要创新以及声明没有一稿多投 Dear Editors, We would like to submit the enclosed...
  • wangkr111
  • wangkr111
  • 2015年06月09日 17:04
  • 6285

openssl 生成证书

生成证书 参考:http://zctya.blog.163.com/blog/static/1209178201251310292958/ 一:生成CA证书  目前不使用第三方权威机...
  • fjz_lihuapiaoxiang
  • fjz_lihuapiaoxiang
  • 2017年12月27日 17:41
  • 29

极深网络(ResNet/DenseNet): Skip Connection为何有效及其它

转自:http://blog.csdn.net/malefactor/article/details/67637785 感谢张俊林通俗的分析。 ========================...
  • langb2014
  • langb2014
  • 2017年03月29日 09:52
  • 2557

出国留学奖学金申请文书英文范文–Cover Letter

出国留学奖学金申请文书英文范文–Cover Letter   出国留学奖学金申请文书范文–Cover Letter(1) Dept. of Electronic En...
  • yanglr2010
  • yanglr2010
  • 2013年05月30日 12:16
  • 3052

LeetCodet题解--17. Letter Combinations of a Phone Number(所有数字键盘组合所对应的所有字符集合)

链接 LeetCode题目:https://leetcode.com/problems/letter-combinations-of-a-phone-number/ GitHub代码:h...
  • gatieme
  • gatieme
  • 2016年04月07日 16:53
  • 1553

SCI 投稿Cover letter模板大全

SCI 投稿Cover letter模板大全
  • jdbc
  • jdbc
  • 2016年12月17日 23:11
  • 444
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Skip Letter Code
举报原因:
原因补充:

(最多只允许输入30个字)