POJ 3073

Spam
Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 505 Accepted: 299

Description

To thwart content-based spam filters, spammers often modify the text of a spam email to prevent its recognition by automatic filtering programs. For any plain text string s (containing only upper-case letters), let Φ(s) denote the string obtained by substituting each letter with its “spam alphabet” equivalent:

A4(four)N|/|(pipe backslash pipe)
B|3(pipe three)O0(zero)
C((left-parenthesis)P|0(pipe zero)
D|)(pipe right-parenthesis)Q(,)(left-parenthesis comma right-parenthesis)
E3(three)R|?(pipe question-mark)
F|=(pipe equals)S5(five)
G6(six)T7(seven)
H#(pound)U|_|(pipe underscore pipe)
I|(pipe)V//(backslash forward-slash)
J_|(underscore pipe)W(backslash forward-slash backslash forward-slash)
K|<(pipe less-than)X><(greater-than less-than)
L|_(pipe underscore)Y-/(minus forward-slash)
M|//|(pipe backslash forward-slash pipe)Z2(two)

In this scheme, any plain text message s corresponds to exactly one spam-encoded message Φ(s). The reverse, however, is not necessarily true: a spam-encoded message may correspond to more than one plain text message.

Given a plain text message s, your goal is to determine the number of unique plain text messages whose spam encoding is Φ(s).

Input

The input test file will contain multiple test cases. Each test case consists of a single line containing a plain text string s containing from 1 to 100 upper-case letters. The end-of-file is denoted by a single line containing the word “end”.

Output

For each test case, print the number of unique plain text messages (including the original message) whose spam encoding is Φ(s). The number of unique plain text messages is guaranteed to be no greater than 1,000,000,000.

Sample Input

BU
UJ
THEQUICKBROWNFOXJUMPEDOVERTHELAZYDOGS
end

Sample Output

6
5
144

Hint

In the first test case, the spam encoding of ‘BU’ is ‘|3|_|’. The 6 plain text messages with this spam encoding are ‘BU’, ‘IEU’, ‘BIJ’, ‘IEIJ’, ‘BLI’, and ‘IELI’. In the second test case, the spam encoding of ‘UJ’ is ‘|_|_|’. The 5 plain text messages with this spam encoding are ‘UJ’, ‘LU’, ‘IJJ’, ‘LLI’, and ‘LIJ’.

Source

-------------------------------------------------------------------------------------------------------------------------------------------------
难度:2   代码 : 2     分类:  动态规划
分析:
最长公共子串的变形。设f(x)为从头开始,长度为x的字符串所对应的数目,则f(k)=sigma(f(j)*t),j=1,...,k,如果字符串的后k-j个字符组成子串正好可以匹配给出的字母对应串,则t=1,否则为0;f(0)=1,f(字符串长)为所求。

 代码:

 

#include  < stdio.h >
#include 
< string .h >

char   *  letter[] = {
  
"4""|3""(""|)""3""|=""6""#""|""_|""|<""|_""|//|",
  
"|/|""0""|0""(,)""|?""5""7""|_|""//""""><""-/""2"
}
;

char  str[ 401 ];
int  num[ 401 ];

// reutrn 0-false ,1-true
int  cmp( char   *  cs, char   *  ps, int  size)
{
    
int i;
    
for(i=0;i<size;i++)
    
{
        
if(*cs!=*ps) return 0;
        cs
++;
        ps
++;
    }
    
    
return 1;
}


int  main()
{
    
char tmp[101];
    
char * p,*q;
    
int i,j,len,ll;
    
while(1)
    
{
        gets(tmp);
        
if(strcmp(tmp,"end")==0)
            
break;
        
for(p=tmp,q=str;*p;p++)
        
{
            strcpy(q,letter[
*p-'A']);
            q
+=strlen(letter[*p-'A']);
        }

        memset(num,
0,401*sizeof(int));
        num[
0]=1;        
        len
=strlen(str);
        
for(i=1;i<=len;i++)
        
{    
            
            
for(j=0;j<26;j++)
            
{                
                ll
=strlen(letter[j]);    
                p
=str+i-ll;
                
if(i>=ll&&cmp(p,letter[j],ll))
                
{
                    num[i]
+=num[i-ll];
                }

            }

        }

        printf(
"%d ",num[len]);
    }

    
return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值