P1540 机器翻译 模拟
题目背景
小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章。
题目描述
这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换。对于每个英文单词,软件会先在内存中查找这个单词的中文含义,如果内存中有,软件就会用它进行翻译;如果内存中没有,软件就会在外存中的词典内查找,查出单词的中文含义然后翻译,并将这个单词和译义放入内存,以备后续的查找和翻译。
假设内存中有MM个单元,每单元能存放一个单词和译义。每当软件将一个新单词存入内存前,如果当前内存中已存入的单词数不超过M-1M−1,软件会将新单词存入一个未使用的内存单元;若内存中已存入MM个单词,软件会清空最早进入内存的那个单词,腾出单元来,存放新单词。
假设一篇英语文章的长度为NN个单词。给定这篇待译文章,翻译软件需要去外存查找多少次词典?假设在翻译开始前,内存中没有任何单词。
输入输出格式
输入格式:
共22行。每行中两个数之间用一个空格隔开。
第一行为两个正整数M,NM,N,代表内存容量和文章的长度。
第二行为NN个非负整数,按照文章的顺序,每个数(大小不超过10001000)代表一个英文单词。文章中两个单词是同一个单词,当且仅当它们对应的非负整数相同。
输出格式:
一个整数,为软件需要查词典的次数。
输入输出样例
3 7 1 2 1 5 4 4 1
5 本来想用队列来做 但是队列没有find 。。count 只有size然后强行模拟效率及其低下 o(nk)
#include<bits/stdc++.h> using namespace std; //input #define rep(i,x,y) for(int i=(x);i<=(y);++i) #define RI(n) scanf("%d",&(n)) #define RII(n,m) scanf("%d%d",&n,&m); #define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k) #define RS(s) scanf("%s",s) #define LL long long #define REP(i,N) for(int i=0;i<(N);i++) #define CLR(A,v) memset(A,v,sizeof A) // #define N 10005 #define inf -0x3f3f3f3f int main() {int k,n;RII(k,n);int a[N];int len=0;int cnt=0;rep(i,1,n){int x;RI(x);int flag=0;rep(j,1,len)if(a[j]==x)flag=1;//找到了if(flag)continue;if(len<k){a[++len]=x;cnt++;}else if(len==k){cnt++;rep(j,1,len-1)a[j]=a[j+1];a[len]=x;}} cout<<cnt;return 0; }
View Code
有一种高效的方法就是用滑动窗孔维护 再加上哈希表 非常推荐!
#include<bits/stdc++.h> using namespace std; //input #define rep(i,x,y) for(int i=(x);i<=(y);++i) #define RI(n) scanf("%d",&(n)) #define RII(n,m) scanf("%d%d",&n,&m); #define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k) #define RS(s) scanf("%s",s) #define LL long long #define REP(i,N) for(int i=0;i<(N);i++) #define CLR(A,v) memset(A,v,sizeof A) // #define N 1005 #define inf -0x3f3f3f3fint ha[N]; int letter[N]; int main() {int k,n;RII(k,n);int left=0;int right=0;int cnt=0;rep(i,1,n){int x;RI(x);if(!ha[x]){ cnt++;ha[x]=1;letter[right++]=x;if(right-left>k)ha[ letter[left++] ]=0;}}cout<<cnt;return 0; }
View Code
还有就是灵活使用STL
之前都不知道vector里面有find
不是专属于vector的 是顺序查找的快捷写法
STL中 set和string自带find set里的find肯定是二分
STL写法的时间复杂度和第一个一样 但是最好写
要学会灵活使用erase和find
#include<bits/stdc++.h> using namespace std; //input #define rep(i,x,y) for(int i=(x);i<=(y);++i) #define RI(n) scanf("%d",&(n)) #define RII(n,m) scanf("%d%d",&n,&m); #define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k) #define RS(s) scanf("%s",s) #define LL long long #define REP(i,N) for(int i=0;i<(N);i++) #define CLR(A,v) memset(A,v,sizeof A) // #define N 1005 #define inf -0x3f3f3f3f vector<int>s; int main() {int k,n;RII(k,n);int cnt=0;rep(i,1,n){int x;RI(x);if(find(s.begin(),s.end(),x)==s.end()){cnt++;s.push_back(x);if(s.size()>k)s.erase(s.begin());}}cout<<cnt;return 0; }
View Code
转载于:https://www.cnblogs.com/bxd123/p/10509947.html
P1540 机器翻译 模拟相关推荐
- 浴谷P1540 机器翻译
浴谷P1540 机器翻译 #include<bits/stdc++.h> using namespace std; int m; int n; queue<int> memor ...
- TZOJ 4813 机器翻译(模拟数组头和尾)
描述 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单词,软件会先在内存中查找这 ...
- P1540 机器翻译
题目链接 题目背景 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 题目描述 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单词 ...
- 洛谷——P1540 机器翻译
题目背景 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 题目描述 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单词,软件会先 ...
- 可由一个尾指针唯一确定的链表有_L2数据结构第08课 单向链表和循环链表
L2-数据结构-第08课 单向链表和循环链表 线性表 线性表是一种常用的数据结构,其中的每一个元素(结点)都有唯一的前驱和唯一的后续.当然,第一个元素只有后续,最后一个元素只有前驱. 线性表一般分为& ...
- 洛谷【数据结构1-1】线性表
P3156 [深基15.例1]询问学号 传送门 题目描述 有 n(n≤2×1^6) 名同学陆陆续续进入教室.我们知道每名同学的学号(在 1 到 10^9之间),按进教室的顺序给出.上课了,老师想知道第 ...
- 重走长征路---OI每周刷题记录---11月4日 2013
总目录详见https://blog.csdn.net/mrcrack/article/details/84471041 做题原则,找不到测评地址的题不做.2018-11-28 重走长征路---OI每周 ...
- lotus表单域怎么获取视图结果_翻译案例 | 商业推广类文章怎么翻?如何修改译文?...
请点击上方Multilingual俱乐部 订阅 Lotus 中英法口笔译 | 语言爱好者 | 吐槽少女 法国巴黎高翻笔译硕士,在法国度过了四年时光,对法语和牛角包满怀热爱. 很多关注我们的朋友对翻译这 ...
- NOIP大纲整理:(零)历年2000-2016NOIP提高组题目分析
年份 题目名称 考查内容 难度 2000-2016年NOIP提高组复赛题目 2000-A 进制转换 初等代数,找规律 ★ 2000-B 乘积最大 资源分配DP ★★★ 2000-C 单词接龙 DF ...
最新文章
- django学习教程
- 一篇文章搞定Python全部基础知识
- 扩展webupload插件,增加ui界面
- 汤家凤高等数学基础手写笔记-极限与连续
- 若只让我推荐一名LiveVideoStackCon上海的讲师,就是他
- ejb 2.0 3.0_EJB 3.0注入和查找简介
- 前端学习(2432):上午总结
- 【名额有限】云开发AI拓展能力等你来体验!
- dockerfile拉取python3.7镜像
- matlab启动不了jvm,MATLAB ::在-nojvm启动选项下不再支持此功能
- jsp常用的onchange事件
- CCF 201412-1 门禁系统
- 乱码ictclas java_中科院分词系统(NLPIR)JAVA简易教程
- 0基础学python要多久-零基础学习Python开发需要多长时间?
- python穷举法_python 穷举指定长度的密码例子
- python相关函数_Python 函数相关概念
- ISP模块之色彩增强算法--HSV空间Saturation通道调整
- r语言进行自然语言处理_开始进行自然语言处理
- Gantt(甘特图)与PERT(项目计划评审技术)图
- iphone长截图哪个软件好_这应该是目前为止,iPhone上最好的长截图工具
热门文章
- python使用virtualenvwrapper
- H3C S1526交换机端口镜像配置
- substr 与 substring 的区别
- Android Http客户端如何选择?
- Javascript中操作cookie
- js里面关于IE和万恶的IE6的判断
- 未能找到服务器的主机名,未能找到服务器的主机名
- 亚太数学建模竞赛优秀论文_全国大学生数学建模竞赛介绍
- c语言在单行文本上删除子串,一道比较简单的题——PTA基础编程题目集 7-29 删除字符串中的子串 C语言试解-Go语言中文社区...
- 优良中差五个等级英文表达_谈谈英文医学论文的文体特征和翻译技巧