OJ# 376 机器翻译

news/2025/1/15 8:04:22/

题目描述

​ 小李的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章。
​这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换。对于每个英文单词,软件会先在内存中查找这个单词的中文含义,
如果内存中有,软件就会用它进行翻译;如果内存中没有,软件就会在外存中的词典内查找,查出单词的中文含义然后翻译,
并将这个单词和译义放入内存,以备后续的查找和翻译。​ 假设内存中有 M 个单元,每单元能存放一个单词和译义。
每当软件将一个新单词存入内存前,如果当前内存中已存入的单词数不超过 M−1,软件会将新单词存入一个未使用的内存单元;
若内存中已存入 M 个单词,软件会清空最早进入内存的那个单词,腾出单元来,存放新单词。
​假设一篇英语文章的长度为 N 个单词。给定这篇待译文章,翻译软件需要去外存查找多少次词典?
假设在翻译开始前,内存中没有任何单词。

输入

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

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

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

输出

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

样例输入

3 7
1 2 1 5 4 4 1

样例输出

5

样例说明

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

空:内存初始状态为空。

1.1:查找单词1并调入内存。

2. 12:查找单词2并调入内存。

3. 12:在内存中找到单词1。

4. 125:查找单词5并调入内存。

5. 254:查找单词4并调入内存替代单词1。

6. 254:在内存中找到单词4。

7. 541:查找单词1并调入内存替代单词2。

共计查了5次词典。

数据规模与约定

​ > 时间限制:1 s

​ > 内存限制:256 M

​ > 100% 的数据保证 0≤M≤100,0≤N≤1000

代码

#include <stdio.h>
#include <stdlib.h>int chapter[1005] = {0};
void add_word(int *memory, int word, int m) {for (int i = 0; i < m; i++) {if (memory[i] == -1) {memory[i] = word;break ;}}
}void replace_first_word(int *memory, int word, int m) {for (int i = 0; i < m - 1; i++) {memory[i] = memory[i + 1];}memory[m - 1] = word;
}int is_found(int *memory, int word, int m) {for (int i = 0; i < m; i++) {if (memory[i] == word) {return 1;}}return 0;
}void find_count(int *chapter, int m, int n) {int count = 0, size = 0, memory[105] = {0};for (int i = 0; i  < m; i++) {memory[i] = -1;}for (int i = 0; i < n; i++) {if (!is_found(memory, chapter[i], m)) {if (count < m) {add_word(memory, chapter[i], m);} else {replace_first_word(memory, chapter[i], m);}count++;}}printf("%d", count);
}int main() {int m, n;scanf("%d%d\n", &m, &n);for (int i = 0; i < n; i++) {scanf("%d", &chapter[i]);}find_count(chapter, m, n);return 0;
}

在这里插入图片描述


http://www.ppmy.cn/news/586287.html

相关文章

Android Jetpack Compose之轻松添加分隔线:Divider组件

引言&#xff1a; 在构建用户界面时&#xff0c;有效地组织和分隔内容是至关重要的。这就是Android Jetpack Compose的Divider组件派上用场的地方。在这篇博客中&#xff0c;我们将详细了解Divider组件的功能和用法&#xff0c;并通过示例展示如何将其融入您的Compose UI。 Je…

11-12 - 信号发送与处理

---- 整理自狄泰软件唐佐林老师课程 查看所有文章链接&#xff1a;&#xff08;更新中&#xff09;Linux系统编程训练营 - 目录 文章目录 1. 信号的概念及分类1.1 问题1.2 什么是信号1.3 信号的分类1.3.1 硬件异常信号1.3.2 终端相关信号1.3.3 软件相关信号 1.4 内核与信号1.5 …

ios wda 编译问题汇总

目录 一、问题一 二、问题二&#xff1a; 三、问题三 四、问题四 五、问题五 六、问题六 一、问题一 报错信息&#xff1a;Building for iOS, but the linked and embedded framework RoutingHTTPServer.framework was built for iOS iOS Simulator 解决办法&#xff1a…

WDA学习笔记(二)通过页面跳转理解WDA开发流程

在进行开发之前先简单介绍一下WDA的控制器&#xff1a; WDA控制器包括组件控制器、定制控制器、视图控制器和窗口控制器。 • 组件控制器 每个 Web Dynpro 组件只有一个组件控制器。该控制器是全局控制 器&#xff0c;对所有其它控制器可见。组件控制器可以控制整个组件的功 能…

SAP之FPM卷二:FPM开发实例-创建WDA应用

系列文章目录 SAP之FPM卷一&#xff1a;FPM是什么 SAP之FPM卷三&#xff1a;FPM开发实例-设想需求与优化 SAP之FPM卷四&#xff1a;FPM开发实例- 创建程序所需表&#xff0c;结构并完成搜索页面主要代码 SAP之FPM卷五&#xff1a;FPM开发实例-完成主页面功能&#xff08;1&…

WDA Architecture

忙了一阵子, 把我学习WD的计划打乱了,今天终于有点时间可以开学了, 先转篇网文先. 原文地址: http://moonroom1.spaces.live.com/blog/cns!7578AFCD9C32F7B1!443.entry Web Dynpro ABAP 系列: WDA Architecture (1) 上图是经典MVC模式, 通过将软件结构分离为Model, View, Contr…

Appium 自动化测试配置wda的两种方式。

tips&#xff1a;WebDriverAgent是Appium1.6.3以后版本新添加的模块&#xff0c;为了让appium与iPhone(基于xcuitest)设备进行通信而添加的。但是&#xff0c;这个模块在是一个独立的项目&#xff0c;在使用前必须编译、安装。下面介绍Appium中的WebDriverAgent的编译和打包。 …

WDA学习(29):WDA HTML

1.22 HTML Container 本实例测试HTML在WDA中结合使用。 創建WDA Component: Z_TEST_WDA99 UI Element VIEW:MAIN 創建UI Element:Splitter,SP1 設置height:600px; 設置sashPosition:20 設置sashPositionMode:percent 創建UI Element:Group,GP1 創建UI Element:LinkToAction,LIN…