题目选自洛谷P1540

主要思路是

  • 使用一个 vector 来表示内存。
  • 依次读如数据,判断是否在内存中(find)。如果不在,就需要查词典,然后加入内存、将答案 + 1。
  • 如果内存满了,就把最先进入内存的单词删掉(erase)

至此,思路分析完毕,贴上不到 2020 行的 AC 代码。

题目背景

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

题目描述

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

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

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

输入格式

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

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

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

输出格式

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

输入输出样例

输入 1

3 7
1 2 1 5 4 4 1

输出 1

5

说明/提示

样例解释

整个查字典过程如下:每行表示一个单词的翻译,冒号前为本次翻译后的内存状况:

  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 次词典。

数据范围

  • 对于 10\%10% 的数据有 M=1,N≤5;
  • 对于 100\%100% 的数据有 1≤M≤100,1≤N≤1000。

解题代码:

#include<stdio.h>
#include<iostream>
#include<stdlib.h>
#include<algorithm>
#include<vector>
using namespace std;
vector<int> v;
int m,n,t,ans;
int main(){cin>>m>>n;while(n--){cin>>t;if(find(v.begin(),v.end(),t) == v.end()){v.push_back(t);ans++;}if(v.size() > m)v.erase(v.begin());}cout<<ans<<endl;return 0;
}

vector数组的使用——机器翻译(洛谷 P1540)相关推荐

  1. 深入理解 操作系统 LRU算法(以洛谷P1540题为例)

    LRU算法 LeastRecentlyUsedLeast Recently UsedLeastRecentlyUsed 算法,意为"最近最少使用",这是操作系统内存管理部分重要的一 ...

  2. 洛谷——P1540 机器翻译

    题目背景 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 题目描述 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单词,软件会先 ...

  3. 机器翻译(洛谷-P1540)

    题目描述 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单词,软件会先在内存中查找这个单词的中文含义,如果内存中有,软件就会用它进行翻译:如果内存中没 ...

  4. 数组——寄包柜(洛谷 P3613)

    题目选自洛谷P3613 比入门稍微麻烦了一点,该题主要为了理解用vector如何创建二维数组及其引用对应的值. 解题代码: #include<stdio.h> #include<io ...

  5. 数组——询问学号(洛谷 P3156)

    题目选自洛谷P3156 非常简单的入门题目,目的在于初步了解可变长数组vector的使用 解题代码: #include<stdio.h> #include<iostream> ...

  6. 洛谷P3939 数颜色 vector乱搞

    洛谷P3939 数颜色 标签 vector乱搞 简明题意 给一个序列(n <= 3e5),现需要你支持两种操作. 询问区间[L,R]中有多少个值为x的数 交换第k和k+1个数 思路 首先,这题需 ...

  7. 洛谷P3688/uoj#291. [ZJOI2017]树状数组

    传送门(uoj) 传送门(洛谷) 这里是题解以及我的卡常数历程 话说后面那几组数据莫不是lxl出的这么毒 首先不难发现这个东西把查询前缀和变成了查询后缀和,结果就是查了\([l-1,r-1]\)的区间 ...

  8. 洛谷P3763 [Tjoi2017]DNA 【后缀数组】

    题目链接 洛谷P3763 题解 后缀数组裸题 在BZOJ被卡常到哭QAQ #include<algorithm> #include<iostream> #include< ...

  9. 树状数组入门——以洛谷3374为例

    树状数组入门 含义:顾名思义,用树状表示的数组 功能:是一个查询和修改复杂度都为log(n)的数据结构.主要用于查询任意两位之间的所有元素之和,但是每次只能修改一个元素的值:经过简单修改可以在log( ...

最新文章

  1. 交互两个数(不引入第三个变量)
  2. Zstd 压缩性能分析(含比较)
  3. 【转载】Python日期时间模块datetime详解与Python 日期时间的比较,计算实例代码
  4. 五个数字从小到大排序java,五个数冒泡排序 用c语言数组定义5个数使用冒泡排序 从小到大...
  5. ML.NET Cookbook:(4)如何调试实验或预览管道?
  6. “桌面日历”记录的事件居然是看某某视频……
  7. 让全球数亿人拍摄到更美的照片,【北京三星研究院】招聘
  8. 计算机曝光模式有哪些,摄影:单反相机中P、A、S、M四种曝光模式的用法详解 -电脑资料...
  9. 教育资源数字化 计算机和通讯,《计算机网络技术课程数字化资源开发研究》.doc...
  10. 在OpenSSL中添加自定义加密算法
  11. VMware 15 上Mac虚拟机卡顿情况的优化
  12. 手机12306买卧铺下铺技巧_12306火车票如何买下铺 手机12306买下铺技巧
  13. python3GUI--下载抖音小姐姐所有无水印视频(附源码)
  14. hive实现日期相减
  15. NVIDIA Jetson Xavier NX 安yolo v5 +D435i摄像头 pyrealsense2 亲测好用
  16. 算法实践:波兰表达式
  17. iOS 上传App Store 报 ITMS-90096错误处理方法
  18. 带着孩子学数学--经验总结1:乘法怎么教,小学数学阶段等等
  19. 给UILable中的文字添加删除线样式
  20. 裁员降薪经济寒冬下的企业舆情危机攻略

热门文章

  1. python函数sn_Python plist.SndRcvList方法代码示例
  2. 安卓 dump 工具 影响_工具如何影响文化?
  3. 机器学习用于数字图像处理_用于创建数字内容的免费电子学习工具
  4. (11)vue.js 指令(3)
  5. (36) css企业代码书写规范
  6. JavaScript canvas实现俄罗斯方块
  7. 知道 | 同学,你都了解关系型数据库,确定不了解一下这种数据库吗?
  8. 电脑固态硬盘接口辨析
  9. HTML5 Canvas中处理图像和视频
  10. 中学教师计算机技术培训资料,教师信息技术能力培养