正文

Zju 1387 Decoding Morse Sequences2007-01-21 21:43:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/cruxd/22738.html

分享到:

    老实的说,我对自己解出这道题并不抱很大的希望——不比今天上午的考试及格的概率大。众所周知,今天是研究生入学考试的第二天,上午这门是最头疼的数学,高考那年的数学就特别难……当然这和我的人品没有半点联系。

    幸好我对这门课的期望值相当的低。每次我很低调地打出我的数学宣言,周围总是用看野生大熊猫的目光看着我。本来这种行为相当低调,当重复了一百遍以后就变成了高调。所以我的希望是数学要么就考中考卷——我中考很不谦虚地拿了全市第一,但是我怕让我现在去考也会落榜;要么就越难越好,要死一起死。

    我的祈祷果然生效了。当我做到大题第二题的时候,我还信心满满,想象着浙大的幸福生活。

    要谨慎要谨慎要谨慎要谨慎要谨慎要谨慎要谨慎要谨慎要谨慎要谨慎要谨慎要谨慎要谨慎要谨慎要谨慎要谨慎要谨慎要谨慎要谨慎要谨慎。

    我低声告诫自己,一边翻开第三题。不会做——不要紧。第四题,做不来。还有四题。我向来保持革命乐观的精神,这是江总的教导。

    当我把整张试卷全部翻阅一遍,突然发现自己能做的不过区区七、八十分时,革命精神立刻被轰到片·甲·不·留。呜呜呜,我要回家找妈妈。

    当然,这同样和我的人品没有任何联系。我现在只希望两件事。

    一、数学分数线被轰到最低。

    二、让——我——过——线。

    罗里八索地扯了一大堆。正题只写两句话 = =

    1.把字典里的char*变成莫尔码。

    2.对要求的morse码dp。

#include <cstdio>
#include <string>

char tran[26][5] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..",
                "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-",
                "-.--", "--.."};

char word[10001][100], morse[10001], dic[10001][21];
int f[10001], c, n, len;

void pf ()
{
 int i;
 for (i = 0; i <= len; i ++)
 {
  printf("%d", f[i]);
 }
 printf("\n");
}

void pw ()
{
 int i;
 for (i = 0; i < n; i ++)
 {
  printf("%s\n", word[i]);
 }
}

void init ()
{
 int i, k;
 for (i = 0; i < n; i ++)
 {
  memset (word[i], 0, sizeof(word[i]));
  for (k = 0; k < strlen (dic[i]); k ++)
  {
   strcat (word[i], tran[dic[i][k] - 'A']);
  }
 }
 memset (f, 0, sizeof(f));
 len = strlen (morse);
 f[0] = 1;
}

void dp ()
{
 int i, k, j;
 for (i = 0; i <= len; i ++)
 {
  if (f[i] || !i)
  {
   for (k = 0; k < n; k ++)
   {
    int ac = 1;
    for (j = 0; j < strlen (word[k]); j ++)
    {
     if (i + j == len) 
     {
      break;
     }
     if (morse[i + j] != word[k][j])
     {
      ac = 0;
      break;
     }
    }
    if (ac)
    {
     f[i + strlen (word[k])] += f[i];
    }
   }
  }
 }
}

void print ()
{
 //printf ("%s\n", morse);
 //pw ();
 //pf ();
 printf ("%d\n", f[len]);
}

int main ()
{
 //freopen ("in.txt", "r", stdin);
 scanf ("%d", &c);
 while (c --)
 {
  scanf ("%s", &morse);
  scanf ("%d", &n);
  int i;
  for (i = 0; i < n; i ++)
  {
   scanf ("%s", &dic[i]);
  }
  init ();
  dp ();
  print ();
 }
 return 0;
}   

发贴心情 
2204291 2007-01-21 20:54:17 Accepted 1387 C++ 00:00.12 1620K Crux.D

阅读(3781) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册