vector数组的使用——机器翻译(洛谷 P1540)
题目选自洛谷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
:查找单词 2 并调入内存。1 2
:在内存中找到单词 1。1 2 5
:查找单词 5 并调入内存。2 5 4
:查找单词 4 并调入内存替代单词 1。2 5 4
:在内存中找到单词 4。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)相关推荐
- 深入理解 操作系统 LRU算法(以洛谷P1540题为例)
LRU算法 LeastRecentlyUsedLeast Recently UsedLeastRecentlyUsed 算法,意为"最近最少使用",这是操作系统内存管理部分重要的一 ...
- 洛谷——P1540 机器翻译
题目背景 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 题目描述 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单词,软件会先 ...
- 机器翻译(洛谷-P1540)
题目描述 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单词,软件会先在内存中查找这个单词的中文含义,如果内存中有,软件就会用它进行翻译:如果内存中没 ...
- 数组——寄包柜(洛谷 P3613)
题目选自洛谷P3613 比入门稍微麻烦了一点,该题主要为了理解用vector如何创建二维数组及其引用对应的值. 解题代码: #include<stdio.h> #include<io ...
- 数组——询问学号(洛谷 P3156)
题目选自洛谷P3156 非常简单的入门题目,目的在于初步了解可变长数组vector的使用 解题代码: #include<stdio.h> #include<iostream> ...
- 洛谷P3939 数颜色 vector乱搞
洛谷P3939 数颜色 标签 vector乱搞 简明题意 给一个序列(n <= 3e5),现需要你支持两种操作. 询问区间[L,R]中有多少个值为x的数 交换第k和k+1个数 思路 首先,这题需 ...
- 洛谷P3688/uoj#291. [ZJOI2017]树状数组
传送门(uoj) 传送门(洛谷) 这里是题解以及我的卡常数历程 话说后面那几组数据莫不是lxl出的这么毒 首先不难发现这个东西把查询前缀和变成了查询后缀和,结果就是查了\([l-1,r-1]\)的区间 ...
- 洛谷P3763 [Tjoi2017]DNA 【后缀数组】
题目链接 洛谷P3763 题解 后缀数组裸题 在BZOJ被卡常到哭QAQ #include<algorithm> #include<iostream> #include< ...
- 树状数组入门——以洛谷3374为例
树状数组入门 含义:顾名思义,用树状表示的数组 功能:是一个查询和修改复杂度都为log(n)的数据结构.主要用于查询任意两位之间的所有元素之和,但是每次只能修改一个元素的值:经过简单修改可以在log( ...
最新文章
- 交互两个数(不引入第三个变量)
- Zstd 压缩性能分析(含比较)
- 【转载】Python日期时间模块datetime详解与Python 日期时间的比较,计算实例代码
- 五个数字从小到大排序java,五个数冒泡排序 用c语言数组定义5个数使用冒泡排序 从小到大...
- ML.NET Cookbook:(4)如何调试实验或预览管道?
- “桌面日历”记录的事件居然是看某某视频……
- 让全球数亿人拍摄到更美的照片,【北京三星研究院】招聘
- 计算机曝光模式有哪些,摄影:单反相机中P、A、S、M四种曝光模式的用法详解 -电脑资料...
- 教育资源数字化 计算机和通讯,《计算机网络技术课程数字化资源开发研究》.doc...
- 在OpenSSL中添加自定义加密算法
- VMware 15 上Mac虚拟机卡顿情况的优化
- 手机12306买卧铺下铺技巧_12306火车票如何买下铺 手机12306买下铺技巧
- python3GUI--下载抖音小姐姐所有无水印视频(附源码)
- hive实现日期相减
- NVIDIA Jetson Xavier NX 安yolo v5 +D435i摄像头 pyrealsense2 亲测好用
- 算法实践:波兰表达式
- iOS 上传App Store 报 ITMS-90096错误处理方法
- 带着孩子学数学--经验总结1:乘法怎么教,小学数学阶段等等
- 给UILable中的文字添加删除线样式
- 裁员降薪经济寒冬下的企业舆情危机攻略
热门文章
- python函数sn_Python plist.SndRcvList方法代码示例
- 安卓 dump 工具 影响_工具如何影响文化?
- 机器学习用于数字图像处理_用于创建数字内容的免费电子学习工具
- (11)vue.js 指令(3)
- (36) css企业代码书写规范
- JavaScript canvas实现俄罗斯方块
- 知道 | 同学,你都了解关系型数据库,确定不了解一下这种数据库吗?
- 电脑固态硬盘接口辨析
- HTML5 Canvas中处理图像和视频
- 中学教师计算机技术培训资料,教师信息技术能力培养