当前位置: 首页 > news >正文

NOIP201005机器翻译 题解

NOIP201005机器翻译 题解

  • 题目
    • 链接
    • 字面描述
      • 题目背景
      • 题目描述
      • 输入格式
      • 输出格式
      • 样例 #1
        • 样例输入 #1
        • 样例输出 #1
      • 提示
        • 样例解释
        • 数据范围
  • 思路
  • 代码实现

题目

链接

https://www.luogu.com.cn/problem/P1540

字面描述

题目背景

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

题目描述

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

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

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

输入格式

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

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

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

输出格式

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

样例 #1

样例输入 #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 5 5 次词典。

数据范围

  • 对于 10 % 10\% 10% 的数据有 M = 1 M=1 M=1 N ≤ 5 N \leq 5 N5
  • 对于 100 % 100\% 100% 的数据有 1 ≤ M ≤ 100 1 \leq M \leq 100 1M100 1 ≤ N ≤ 1000 1 \leq N \leq 1000 1N1000

思路

用一个队列+桶去维护
每天加一个元素将队首与队尾元素得出总长度
添加,查询使用桶

代码实现

#include<bits/stdc++.h>
using namespace std;

const int maxn=5e4+10;
const int maxm=1e3+10;
int m,n,ans;
int a[maxn],que[maxn];
bool vis[maxm];
int main(){
	//freopen("E.in","r",stdin);
	//freopen("E.out","w",stdout);
	scanf("%d%d",&m,&n);
	int head=0,tail=0;
	for(int i=1;i<=n;i++){
		int x;
		scanf("%d",&x);
		if(vis[x])continue;
		if(tail+1-head>m)vis[que[head++]]=false;
		que[tail++]=x;
		vis[x]=true;
		ans++;
	}
	printf("%d",ans);
	return 0;
}

相关文章:

  • 解读ICLR 2021:DoodlerGAN创意草图开山之作
  • 稀疏表示理论(与指静脉识别)
  • 遥感航拍影像25篇CVPR39个数据集
  • 【cmake实战十一】com组件方法的简单实现
  • RDP直线圆弧分割算法
  • 为什么有的python内置函数怎么就一个pass?
  • 主从复制 读写分离
  • flink-taskmanager内存计算
  • 大数据复习(day03)
  • C++ 优先队列 priority_queue 使用篇
  • 同事嫌我改Bug慢,原来是没掌握这些代码Debug技巧
  • 图文讲解带你拿捏MyBatis(一)——MyBatis入门
  • [Python]Django类视图
  • 重识Nginx - 12 SSL/TLS 浅析
  • 神经网络做多元线性回归,神经网络是线性模型吗
  • 《深入 React 技术栈》
  • Centos6.8 使用rpm安装mysql5.7
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • EOS是什么
  • ES6 学习笔记(一)let,const和解构赋值
  • JS字符串转数字方法总结
  • linux安装openssl、swoole等扩展的具体步骤
  • Lsb图片隐写
  • Median of Two Sorted Arrays
  • Next.js之基础概念(二)
  • php中curl和soap方式请求服务超时问题
  • uva 10370 Above Average
  • windows下mongoDB的环境配置
  • 大型网站性能监测、分析与优化常见问题QA
  • 一起参Ember.js讨论、问答社区。
  • 一文看透浏览器架构
  • Java总结 - String - 这篇请使劲喷我
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (强烈推荐)移动端音视频从零到上手(下)
  • (转) ns2/nam与nam实现相关的文件
  • .NET Micro Framework初体验
  • .NET Remoting学习笔记(三)信道
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • .NET企业级应用架构设计系列之开场白
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • @Async注解的坑,小心
  • @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本...
  • @RequestBody的使用
  • [].shift.call( arguments ) 和 [].slice.call( arguments )
  • [Cocoa]iOS 开发者账户,联机调试,发布应用事宜
  • [CTF]php is_numeric绕过
  • [C语言][PTA基础C基础题目集] strtok 函数的理解与应用
  • [echarts] y轴不显示0
  • [EFI]DELL XPS13 9360电脑 Hackintosh 黑苹果efi引导文件