07:机器翻译
7:机器翻译
总时间限制: 1000ms 内存限制: 65536kB描述
小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章。
这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换。对于每个英文单词,软件会先在内存中查找这个单词的中文含义,如果内存中有,软件就会用它进行翻译;如果内存中没有,软件就会在外存中的词典内查找,查出单词的中文含义然后翻译,并将这个单词和译义放入内存,以备后续的查找和翻译。
假设内存中有M个单元,每单元能存放一个单词和译义。每当软件将一个新单词存入内存前,如果当前内存中已存入的单词数不超过M−1,软件会将新单词存入一个未使用的内存单元;若内存中已存入M 个单词,软件会清空最早进入内存的那个单词,腾出单元来,存放新单词。
假设一篇英语文章的长度为N个单词。给定这篇待译文章,翻译软件需要去外存查找多少次词典?假设在翻译开始前,内存中没有任何单词。
输入输入文件共2行。每行中两个数之间用一个空格隔开。 第一行为两个正整数M和N,代表内存容量和文章的长度。 第二行为N个非负整数,按照文章的顺序,每个数(大小不超过1000)代表一个英文单词。文章中两个单词是同一个单词,当且仅当它们对应的非负整数相同。 对于10%的数据有M = 1,N ≤ 5。 对于100%的数据有0 < M ≤ 100,0 < N ≤ 1000。输出共1行,包含一个整数,为软件需要查词典的次数。样例输入
样例 #1:
3 7
1 2 1 5 4 4 1
样例 #2:
2 10
8 824 11 78 11 78 11 78 8 264
样例输出
样例 #1:
5
样例 #2:
6
提示输入输出样例 1 说明: 整个查字典过程如下:每行表示一个单词的翻译,冒号前为本次翻译后的内存状况: 空:内存初始状态为空。 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 次词典。
1 #include<iostream>
2 #include<cstring>
3 #include<cstdio>
4 #include<cmath>
5 #include<queue>
6 #include<vector>
7 #include<algorithm>
8 using namespace std;
9 int m;//内存容量
10 int n;//文章长度
11 int a[1001];//存放当前字典
12 vector<int>zd;//存放内存中的字典
13 int tot;//需要查找的次数
14 int find(int tot)
15 {
16 for(int i=1;i<=n;i++)// 1 2 1 5 4 4 1
17 {
18 if(find(zd.begin(),zd.end(),a[i])==zd.end())
19 {
20 if(zd.size()==m)
21 {
22 zd.erase(zd.begin());//删除第一个元素
23 zd.push_back(a[i]);
24 tot++;
25 }//内存已满
26 else
27 {
28 zd.push_back(a[i]);
29 tot++;
30 }
31 }//没有找到元素
32 else
33 continue;//找到之后直接返回
34
35 }//遍历每一个字符
36 return tot;
37 }
38 int main()
39 {
40 cin>>m>>n;
41 for(int i=1;i<=n;i++)
42 cin>>a[i];
43 cout<<find(0);
44 return 0;
45 }
- MYSQL5.6&5.7编译安装
- 架构高性能网站秘笈(三)——浏览器缓存
- 剑指 offer代码解析——面试题39判断平衡二叉树(高效方法)
- 跟着柴毛毛学Spring(4)——面向切面编程![这里写图片描述](http://img.blog.csdn.net/20171031111402095)
- MYSQL数据闪回方式
- 剑指 offer代码解析——面试题39判断平衡二叉树
- 跟着柴毛毛学Spring(3)——简化Bean的配置
- 剑指 offer代码解析——面试题39二叉树的深度
- 跟着柴毛毛学Spring(2)——Bean的配置
- C++ 使用STL string 实现的split,trim,replace-修订
- 跟着柴毛毛学Spring(1)——纵观Spring
- MYSQL常用SQL汇总
- Linux 下设置SVN DIFF
- 剑指 offer代码解析——面试题38数字在排序数组中出现的次数
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 视频上云网关平台EasyCVR使用海康SDK拉流协议分析
- 计算机网络物理层习题
- 从数据库中查询马上过生日的人并统计各年龄段及性别所占的人数
- Ubuntu19.10 中安装 JDK
- 在 Ubuntu19.10 上安装 wine 并安装 QQ 等软件
- wordpress迁移至hugo及其自动化发布文章全记录
- 视频流媒体平台EasyNVR硬件设备使用华科云arm版如何修改为固定IP?
- 详解 IP 地址
- k8s解决pod调度不均衡的问题
- 如何获取视频流媒体服务器EasyNVR的临时授权机器码?
- Mybatis-Plus常用注解
- IDEA 你不知道小技巧——后缀法自动生成代码(Postfix Completion)
- Mybatis-Plus使用乐观锁
- k8s基础之调度策略(二)
- k8s基础之调度策略(一)