洛谷:P1540 [NOIP2010 提高组] 机器翻译

[NOIP2010 提高组] 机器翻译

题目背景

NOIP2010 提高组 T1

题目描述

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

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

假设内存中有 M M M 个单元,每单元能存放一个单词和译义。每当软件将一个新单词存入内存前,如果当前内存中已存入的单词数不超过 M − 1 M-1 M−1,软件会将新单词存入一个未使用的内存单元;若内存中已存入 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 N≤5;
  • 对于 100 % 100\% 100% 的数据有 1 ≤ M ≤ 100 1 \leq M \leq 100 1≤M≤100, 1 ≤ N ≤ 1000 1 \leq N \leq 1000 1≤N≤1000。

提交代码

c 复制代码
#include<iostream>
using namespace std;
const int N = 1e6 + 10;
int quee[N]={-1}, a[N], n, m;
int l, k,sum;
bool flag = false;
int main()
{
	cin >> n >> m;
	for (int i = 0; i < m; i++)
	{
		cin >> a[i];
		if (a[i] == 0)
			a[i] = -1;
	}
	for (int i = 0; i < m; i++)
	{
		flag = false;
		for (int j = l; j < n; j++)
		{
			if (a[i] == quee[j])
			{
				flag = true;
				break;
			}
		}
		if (!flag)
		{
			quee[k++] = a[i];
			sum++;

		}
		if (k > n)
		{
			quee[l++] = -1;
			n++;
		}
	}
	cout << sum << endl;
	return 0;
}

代码思路总结

  • 输入处理
    • 读取内存容量 n 和文章长度 m
    • 读取文章中的单词序列 a[],并将值为 0 的单词替换为 -1(为了避免与未初始化的队列元素冲突)。
  • 逻辑处理
    • 遍历文章中的每个单词:
      • 检查当前单词是否已经在内存队列 quee[] 中。
      • 如果单词不在内存中,则将其加入队列,并增加查词典次数 sum
      • 如果队列已满(k > n),则移除最早进入队列的单词(通过移动左指针 l)。
  • 输出结果
    • 输出查词典的总次数 sum

算法刷题记录

相关推荐
AI科技3 分钟前
原创音乐人提升写歌数量,AI编曲软件实现创作周期大幅缩短
人工智能
亲爱的非洲野猪4 分钟前
从约束到互联:LLM生态中Rules、Tools、Skills与MCP的演进史
人工智能
jay神4 分钟前
基于MobileNet花卉识别系统
人工智能·深度学习·计算机视觉·毕业设计·花卉识别
云卓SKYDROID4 分钟前
无人机故障诊断技术模块要点!
人工智能·无人机·高科技·云卓科技·故障模块
m0_603888715 分钟前
VEQ Modality-Adaptive Quantization for MoE Vision-Language Models
人工智能·ai·语言模型·自然语言处理·论文速览
智驱力人工智能5 分钟前
无人机目标检测 低空安全治理的工程实践与价值闭环 无人机缺陷识别 农业无人机作物长势分析系统 森林防火无人机火点实时识别
人工智能·opencv·安全·yolo·目标检测·无人机·边缘计算
YuTaoShao6 分钟前
【LeetCode 每日一题】3013. 将数组分成最小总代价的子数组 II
算法·leetcode·职场和发展
zhangfeng11336 分钟前
大语言模型llm 量化模型 跑在 边缘设备小显存显卡 GGUF GGML PyTorch (.pth, .bin, SafeTensors)
人工智能·pytorch·深度学习·语言模型
纤纡.6 分钟前
深度学习环境搭建:CUDA+PyTorch+TorchVision+Torchaudio 一站式安装教程
人工智能·pytorch·深度学习
方见华Richard7 分钟前
《认知几何学:思维如何弯曲意义空间》补充材料
人工智能·经验分享·交互·原型模式·空间计算