zoukankan      html  css  js  c++  java
  • 洛谷1540 机器翻译 解题报告

    洛谷1540 机器翻译

    本题地址: http://www.luogu.org/problem/show?pid=1540

    题目背景

    小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章。

    题目描述

    这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换。对于每个英文单词,软件会先在内存中查找这个单词的中文含义,如果内存中有,软件就会用它进行翻译;如果内存中没有,软件就会在外存中的词典内查找,查出单词的中文含义然后翻译,并将这个单词和译义放入内存,以备后续的查找和翻译。

    假设内存中有M个单元,每单元能存放一个单词和译义。每当软件将一个新单词存入内存前,如果当前内存中已存入的单词数不超过M-1,软件会将新单词存入一个未使用的内存单元;若内存中已存入M个单词,软件会清空最早进入内存的那个单词,腾出单元来,存放新单词。

    假设一篇英语文章的长度为N个单词。给定这篇待译文章,翻译软件需要去外存查找多少次词典?假设在翻译开始前,内存中没有任何单词。

    输入输出格式

    输入格式:

    输入文件共2行。每行中两个数之间用一个空格隔开。

    第一行为两个正整数M和N,代表内存容量和文章的长度。

    第二行为N个非负整数,按照文章的顺序,每个数(大小不超过1000)代表一个英文单词。文章中两个单词是同一个单词,当且仅当它们对应的非负整数相同。

    输出格式:

    包含一个整数,为软件需要查词典的次数。

    输入输出样例

    输入样例#1:

    3 7
    1 2 1 5 4 4 1
    

    输出样例#1:

    5
    

    说明

    每个测试点1s
    对于10%的数据有M=1,N≤5。
    对于100%的数据有0<=M<=100,0<=N<=1000。
    整个查字典过程如下:每行表示一个单词的翻译,冒号前为本次翻译后的内存状况:
    空:内存初始状态为空。
    1. 1:查找单词1并调入内存。
    2. 1 2:查找单词2并调入内存。
    3. 1 2:在内存中找到单词1。
    4. 1 2 5:查找单词5并调入内存。
    5. 2 5 4:查找单词4并调入内存替代单词1。
    6. 2 5 4:在内存中找到单词4。
    7. 5 4 1:查找单词1并调入内存替代单词2。
    共计查了5次词典。

    题解

    模拟

     第一眼看到想用队列做,不过觉得太没有技术含量,所以就拿链表做了。

    其实这题也可以开个0~1000的数组 array , 其中 array [ i ] 表示单词 i 的存储次序,0表示不存在。

    输入单词 k 后,查找 array [ k ] 是否为0,若不为0,则 array [ k ]=当前次序。

    随后再从 array[ 0 ]一直搜到 array [ 1000 ] ,若大于最大内存限制则置0。

    不过说到底还是链表好,省空间省时间嘛。

    下面附上代码。

    代码

    1. var  
    2.   q:array[-1000..2000] of longint;  
    3.   s,e,i,j,w,ans,m,n:longint;  
    4.   flag:boolean;  
    5. function size:longint;  
    6. begin  
    7.   exit(e-s+1);  
    8. end;  
    9. begin  
    10.   readln(m,n);  
    11.   s:=1;  
    12.   e:=0;  
    13.   ans:=0;  
    14.   fillchar(q,sizeof(q),0);  
    15.   for i:=to n do  
    16.   begin  
    17.     read(w);  
    18.     flag:=false;      
    19.     for j:=s to e do  
    20.       if q[j]=w then flag:=true;  
    21.     if not flag then   
    22.       begin  
    23.         ans:=ans+1;  
    24.         e:=e+1;  
    25.         q[e]:=w;  
    26.         if size>m then s:=s+1;  
    27.       end;  
    28.   end;  
    29.   writeln(ans);  
    30. end.  

    (本文系笔者原创,未经允许不得转载)

    博文系博主原创,转载请注明出处 o(* ̄▽ ̄*)ブ 更多博文源自https://www.cnblogs.com/yzm10
  • 相关阅读:
    swoole 安装方法 使用即时聊天
    git的介绍以及简单应用
    curl的应用
    linux下监听和同步代码配置
    mac skim 修改背景色
    php 编译安装的一个 configure 配置
    mac mysql error You must reset your password using ALTER USER statement before executing this statement.
    yii2 控制器里 action 大小写组合造成的路由问题
    warning : json_decode(): option JSON_BIGINT_AS_STRING not implemented in xxx
    redis 自启动脚本
  • 原文地址:https://www.cnblogs.com/yzm10/p/4750494.html
Copyright © 2011-2022 走看看