百度之星编程大赛-语言翻译机(C#解答)

原创 2006年06月23日 10:20:00

偶的C遗忘多年了,还是用C#编一个吧,呵呵

 1.百度语言翻译机
 百度的工程师们是非常注重效率的,在长期的开发与测试过程中,他们逐渐创造了一套独特的缩略语。他们在平时的交谈、会议,甚至在各种技术文档中都会大量运用。

 为了让新员工可以更快地适应百度的文化,更好地阅读公司的技术文档,人力资源部决定开发一套专用的翻译系统,把相关文档中的缩略语和专有名词翻译成日常语言。

 输入要求:
 输入数据包含三部分:
 1. 第一行包含一个整数N(N<=10000),表示总共有多少个缩略语的词条;
 2. 紧接着有N行的输入,每行包含两个字符串,以空格隔开。第一个字符串为缩略语(仅包含大写英文字符,长度不超过10字节),第二个字符串为日常语言(不包含空格,长度不超过255字节);
 3. 从第N+2开始到输入结束为包含缩略语的相关文档(总长度不超过1000000个字节)。例:
 6
 PS 门户搜索部
 NLP 自然语言处理
 PM 产品市场部
 HR 人力资源部
 PMD 产品推广部
 MD 市场发展部
 百度的部门包括PS,PM,HR,PMD,MD等等,其中PS还包括NLP小组。
 样例:in.txt

 输出要求:
 输出将缩略语转换成日常语言后的文档。(将缩略语转换成日常语言,其他字符保留原样)。例:
 百度的部门包括门户搜索部,产品市场部,人力资源部,产品推广部,市场发展部等等,其中门户搜索部还包括自然语言处理小组。
 样例:out.txt

 评分规则:
 1.程序将运行在一台Linux机器上(内存使用不作严格限制),在每一测试用例上运行不能超过10秒,否则该用例不得分;
 2.要求程序能按照输入样例的格式读取数据文件,按照输出样例的格式将运行结果输出到标准输出上。如果不能正确读入数据和输出数据,该题将不得分;
 3.该题目共有4个测试用例,每个测试用例为一个输入文件。各测试用例占该题目分数的比例分别为25%,25%,25%,25%;
 4.该题目20分。


 注意事项:
 1.输入数据是中英文混合的,中文采用GBK编码。
 GBK:是又一个汉字编码标准,全称《汉字内码扩展规范》。采用双字节表示,总体编码范围为 8140-FEFE,首字节在 81-FE 之间,尾字节在 40-FE 之间,排除xx7F。总计 23940 个码位,共收入 21886 个汉字和图形符号,其中汉字(包括部首和构件)21003 个,图形符号 883 个。

 2.为保证答案的唯一性,缩略语的转换采用正向最大匹配(从左到右为正方向)原则。请注意样例中PMD的翻译。

//**********************************************//

using System;
using System.IO;
using System.Text;
using System.Collections;

namespace BaiduTest1
{
 /*
  试题题目见.Txt文档  
 */
 class Class1
 {
  /// <summary>
  /// The main entry point for the application.
  /// </summary>
  [STAThread]
  static void Main(string[] args)
  {
   Translate trans = new Translate();
   trans.ReadInput();
   Console.Write(trans.Output());
   Console.ReadLine();
  }
 }

 class Translate
 {
  static readonly string InFileName = "In.txt";//英文和中文的对照
  static readonly string OutFileName = "Out.txt";//要翻译的段落
  Hashtable htMap = new Hashtable();

  public void ReadInput()
  {
   if (File.Exists(InFileName))
   {
    string [] strSplit = null;
    string Input = string.Empty;
    using(StreamReader reader = new StreamReader(InFileName,Encoding.Default))//Encoding.GetEncoding("GB18030"));
    {
     while ((Input = reader.ReadLine()) != null)
     {
      strSplit = Input.Split(' ');//以一个空格做分隔
      if (strSplit.Length == 2 && !htMap.ContainsKey(strSplit[0]))
      {
       htMap.Add(strSplit[0], strSplit[1]);
      }
     } 
    }
   }
  }

  public string Output()
  {
   string txt = string.Empty;
   if (File.Exists(OutFileName))
   {
    string Word = string.Empty;
    int nIndex = 0;
    using(StreamReader reader = new StreamReader(OutFileName, Encoding.Default))
    {
     txt = reader.ReadToEnd();     
     if (txt != string.Empty)
     {
      foreach(char ch in txt)
      {  
       if (ch >= 'A' && ch <= 'Z')
       {
        Word = Word.Insert(Word.Length, ch.ToString());
       }
       else
       {
        if (Word.Length != 0 && htMap.Contains(Word))
        {
         //插入新字符,Index会变化
         txt = txt.Remove(nIndex - Word.Length, Word.Length);
         txt = txt.Insert(nIndex - Word.Length, htMap[Word].ToString());
         nIndex = nIndex - Word.Length + htMap[Word].ToString().Length;         
        }
        Word = string.Empty;
       }
       nIndex++;
      }     
     }
    }    
   }
   return txt;
  }

  
 };
}

源代码下载:

http://www.s135.com/disk/down.php?user=i%06%07IPaUQPSt%0C&pass=Rs%5EUV%7E%5D%14P%0C%60%1Fl%15%5E%0B&mid=1tbiBQEWGEO9TS0PPQAAsm%250A5%250A16539%250A1&funcid=readpart&part=3&filename=BaiduTest1.rar

2015年百度之星程序设计大赛 - 初赛(2)【题解】

1001.追星族 Accepts: 21 Submissions: 122 Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 327...
  • u013368721
  • u013368721
  • 2015年06月02日 16:54
  • 2465

百度之星编程大赛--百度语言翻译机(解答)

百度的工程师们是非常注重效率的,在长期的开发与测试过程中,他们逐渐创造了一套独特的缩略语。他们在平时的交谈、会议,甚至在各种技术文档中都会大量运用。为了让新员工可以更快地适应百度的文化,更好地阅读公司...
  • vargas
  • vargas
  • 2006年06月17日 23:27
  • 1426

2015年百度之星程序设计大赛 - 初赛(1) 【题解】

1001.超级赛亚ACMer Accepts: 867 Submissions: 5329 Time Limit: 2000/1000 MS (Java/Others) Memory Li...
  • u013368721
  • u013368721
  • 2015年06月01日 19:13
  • 2234

2017"百度之星"程序设计大赛 - 初赛(A)

1001 统计p - 1的因子个数 #include #include #include #include #include #include #include #include ...
  • sasuke__
  • sasuke__
  • 2017年08月12日 19:54
  • 330

HDU-2017"百度之星"程序设计大赛-初赛(B)-1002-Factory

ACM模版描述题解其实,这个题的题解我是秒出的,当然,之所以没有写是因为这个秒出的题解也是被我秒掉了,我认识他会超时……始终是这样认为的……可是大概数据没有那么刁钻的极限情况,所以直接 LCA+暴力L...
  • f_zyj
  • f_zyj
  • 2017年08月14日 16:52
  • 422

HDU-2017"百度之星"程序设计大赛-复赛-1003-Pokémon GO

ACM模版描述题解这个题一开始,我想着去 OEISOEIS 查查看,也许可以水过,后来发现不行,接着,就发现这个题和 NYOJNYOJ 上的一个题炒鸡一样,除了题面背景不一样外,其他都是一样的。然后就...
  • f_zyj
  • f_zyj
  • 2017年08月18日 16:47
  • 387

Hdu今夕何夕 (2017"百度之星"程序设计大赛 - 初赛(A))

今夕何夕 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub...
  • Jelly_acm
  • Jelly_acm
  • 2017年08月12日 20:24
  • 418

HDU4828 Grids 2014年百度之星程序设计大赛 - 初赛(第一轮) Catalan数

其实这两道题只不过是题目叙述不同而已……题目是
  • KuribohG
  • KuribohG
  • 2014年05月27日 22:32
  • 485

程序设计:百度语言翻译机

1.百度语言翻译机 百度的工程师们是非常注重效率的,在长期的开发与测试过程中,他们逐渐创造了一套独特的缩略语。他们在平时的交谈、会议,甚至在各种技术文档中都会大量运用。为了让新员工可以更快地适应百度的...
  • Realdodo
  • Realdodo
  • 2006年05月28日 22:18
  • 1218

(数学)2017"百度之星"程序设计大赛 - 初赛(A) 1001

题意 现在给定进制P,求有多少个B满足P进制下,一个正整数是B的倍数的充分必要条件是每一位加起来的和是B的倍数。 思路 只要求p-1的因数个数即为所求 比如十进制数ab(两位数,十位为a, 个位为b)...
  • VonSdite
  • VonSdite
  • 2017年08月12日 18:49
  • 394
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:百度之星编程大赛-语言翻译机(C#解答)
举报原因:
原因补充:

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