Problem C: 机器翻译【stl-队列】

Problem C: 机器翻译

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 54  Solved: 27
[Submit][Status][Web Board]

Description

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

Input

输入文件名为 translate.in,输入文件共 2 行。每行中两个数之间用一个空格隔开。 第一行为两个正整数 M 和 N,代表内存容量和文章的长度。 第二行为 N 个非负整数,按照文章的顺序,每个数(大小不超过 1000)代表一个英文 单词。文章中两个单词是同一个单词,当且仅当它们对应的非负整数相同。

Output

输出文件 translate.out 共 1 行,包含一个整数,为软件需要查词典的次数。

Sample Input

3 7
1 2 1 5 4 4 1

Sample Output

5

HINT

【输入输出样例 1 说明】 整个查字典过程如下:每行表示一个单词的翻译,冒号前为本次翻译后的内存状况:

空:内存初始状态为空。

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 次词典。

【分析】:观察得此为队列结构,按照题意模拟即可。

#include<iostream>
#include<fstream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<set>
#include<queue>
using namespace std;
int n,m;
queue<long> q;
int ans;
bool y[1005];
int main()
{
    cin>>m>>n;
    int a;
 for(int i=1;i<=n;i++)
{
        cin>>a;
        if(y[a]==false)
      {
            q.push(a);
            y[a]=true;
            ans++;
         if(q.size() > m)
          {
              y[q.front()]=false;
               q.pop();
          }
     }
 }
      cout<<ans;
 return 0;
 }

  

时间: 2024-08-03 07:10:58

Problem C: 机器翻译【stl-队列】的相关文章

STL 队列模板实现

C++ Prime确实有点难啊!看了好久都没弄清楚,一点点慢慢来. #include <iostream> #include <string> #include <cstdio> template <class Type> class Queue; //function template declaration must precede friend declaration in QueueItem template <class T> std:

STL 队列 、优先队列、栈 小结

学长说现在基本上可以开始学习STL中一些标准模板了,今天先总结一下 队列.栈.优先队列 1.队列(queue) 先进先出原则,头文件#include <queue>,定义结构queue<类型>名称;queue<int>q.queue<node>q等: 如: struct node { int x; }f; queue<node>q;//结构体类型队列 q.push(f) //将f压入队列的尾部 node t = q.pop()// 弹出队列的第一

STL队列、优先队列、栈

STL 中优先队列的使用方法(priority_queu) 基本操作: empty() 如果队列为空返回真 pop() 删除对顶元素 push() 加入一个元素 size() 返回优先队列中拥有的元素个数 top() 返回优先队列对顶元素 在默认的优先队列中,优先级高的先出队.在默认的int型中先出队的为较大的数. 使用方法: 头文件: #include <queue> 声明方式: 1.普通方法: priority_queue<int>q;//通过操作,按照元素从大到小的顺序出队

c++ STL:队列queue、优先队列priority queue 的使用

说明:本文全文转载而来,原文链接:http://www.cppblog.com/wanghaiguang/archive/2012/06/05/177644.html C++ Queues(队列) C++队列是一种容器适配器,它给予程序员一种先进先出(FIFO)的数据结构.1.back() 返回一个引用,指向最后一个元素2.empty() 如果队列空则返回真3.front() 返回第一个元素4.pop() 删除第一个元素5.push() 在末尾加入一个元素6.size() 返回队列中元素的个数

C++ 标准模板库STL 队列 queue 使用方法与应用介绍

C++ 标准模板库STL 队列 queue 使用方法与应用介绍 queue queue模板类的定义在<queue>头文件中. 与stack模板类很相似,queue模板类也需要两个模板参数,一个是元素类型,一个容器类型,元素类型是必要的,容器类型是可选的,默认为deque类型. 定义queue对象的示例代码如下: queue<int> q1; queue<double> q2; queue的基本操作有: 入队,如例:q.push(x); 将x接到队列的末端. 出队,如例:

【C++】STL队列和栈的使用

C++的STL标准模板库提供了队列和栈的基本操作.下面通过两个demo分别介绍STL队列和STL栈的使用. Demo1:STL队列 [题目]卡片游戏(题目来自刘汝佳<算法竞赛入门>) 桌上又一叠牌,从第一张牌(即位于顶面的牌)开始从上往下依次编号为1~n.当至少还剩两张牌时进行以下操作:把第一张牌扔掉,然后把新的第一张放到整叠牌的最后.输入n,输出每次扔掉的牌,以及最后剩下的牌. 样例输入:7 样例输出:1 3 5 7 4 2 6 [分析]这些牌就是一个先进先出(FIFO)的队列,每次对排头的

C++STL——队列

一.相关定义 原理:queue 队列也是一个线性存储表,元素数据的插入在表的一端进行,在另一端删除,从而构成了一个先进先出FIFO(First In First Out)表. 队头&队尾:插入一端称为队尾,删除一端称为队首. C++队列是一种容器适配器,默认使用双端队列deque来实现,将 deque 容器转换为 queue 容器.当然,也可以利用其他合适的序列容器作为底层实现queue容器. 队列可以用线性表(list)或双向队列(deque)来实现(注意vector container不能用

C++ 学习笔记之 STL 队列

一.  引言 在算法以及数据结构的实现中,很多地方我们都需要队列(遵循FIFO,先进先出原则). 为了使用队列,我们可以自己用数组来实现队列,但自己写太麻烦不说,并且还很容易出错. 好在C++的STL(标准模板库)为我们实现了一个强大的队列,它包含在头文件<queue>中. 二.    queue a)     构造函数 下面用例子来展示queue的构造函数 deque<int> deck(3,100); list<int> mylist(2,100); queue&l

计蒜客课程竞赛入门--最近通话记录(STL队列) 流程记

蒜头君前几天把最心爱的小麦手机摔坏了,新手机又要好几天才能到货,于是蒜头君不得暂时用它珍藏已久的诺鸡鸭非智能手机了.手机的存储空间非常小,以至于未接来电.已接来电和已拨电话都只能各自保存最近的10条记录. 蒜头买了手机以后的未接来电.已接来电和已拨电话记录全部给出.机智的蒜头能够猜到这个手机使用了循环队列来实现最近记录的功能,不过它不会写代码(没手怎么写π_π),于是它来求助正在算法课程中过关斩将的你了.你能帮帮它吗? 输入格式: 每条记录包含两个数字,第一个数代表记录类型,第二个数代表手机号码