1.题意:给定一段长度为N个单词的文章(一个单词用一个非负整数表示),可以使用一个容量为M个元素的容器。你的任务是使用字典的帮助翻译文章,遇到一个单词,查询之后将此单词的释义放入容器中,下次遇到时若此释义还在容器中就可以不用查字典直接得到结果。当容器已满,再遇到需要进入容器的单词,将容器中最早进入的单词剔除,将当前的单词加入。最后要求给出整个过程中需要查字典的次数。

2.分析:根据题意中容器的描述很容易想到使用队列来实现,同时还需要一个数组inq表示各个单词是否在队列中,一个变量num维护当前队列中的元素数量来决定是否继续push进队还是要pop队首再push

PS:Vijos上M,N的数据范围给反了,若不注意可能一直WA,N应该是N<=1000

代码如下,C++版:

 # include <iostream>
# include <cstdio>
# include <cstring>
# include <queue>
using namespace std;
int inq[];
int L[];
int M,N;
void Init()
{
memset(inq,,sizeof(inq));
for(int i=;i<N;i++)
scanf("%d",&L[i]);
}
void Solve()
{
int cnt=;
int inqnum=;
queue<int> Q;
for(int i=;i<N;i++)
{
int temp=L[i];
if(inq[temp]) continue;
else
{
cnt++;
if(inqnum<M)
{
Q.push(temp);
inqnum++;
inq[temp]=;
}
else
{
int tt=Q.front();
inq[tt]=;
Q.pop();
Q.push(temp);
inq[temp]=;
}
}
}
printf("%d\n",cnt);
}
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
while(scanf("%d%d",&M,&N)!=EOF)
{
Init();
Solve();
}
return ;
}

Python版:

 class SQueue():
def __init__(self,init_len=2):
self._len=init_len
self._elems=[0]*init_len
self._head=0
self._num=0
def is_empty(self):
return self._num==0
def peek(self):
#if self._num==0:
# raise QueueUnderflow
return self._elems[self._head]
def dequeue(self):
#if self._num==0:
# raise QueueUnderflow
e=self._elems[self._head]
self._head=(self._head+1)%self._len
self._num-=1
return e
def enqueue(self,e):
if self._num==self._len:
self.__extend()
self._elems[(self._head+self._num)%self._len]=e
self._num+=1
def __extend(self):
old_len=self._len
self._len*=2
new_elems=[0]*self._len
for i in range(old_len):
new_elems[i]=self._elems[(self._head+i)%old_len]
self._elems,self._head=new_elems,0
while True:
try:
M,N=map(int,raw_input().split())
L=map(int,raw_input().split())
inq=[0]*1005
cnt=0
inq_num=0
Q=SQueue()
for i in range(N):
temp=L[i]
#print inq[temp]
if inq[temp]==1:
continue
else:
cnt+=1
if inq_num<M:
inq_num+=1
inq[temp]=1
Q.enqueue(temp)
else:
tt=Q.dequeue()
inq[tt]=0
Q.peek()
inq[temp]=1
Q.enqueue(temp)
print cnt
except:
break

Vijos1774 机器翻译 [模拟]的更多相关文章

  1. P1540 机器翻译 模拟

    题目背景 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 题目描述 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单词,软件会先 ...

  2. TZOJ 4813 机器翻译(模拟数组头和尾)

    描述 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单词,软件会先在内存中查找这 ...

  3. NOIP2010 提高组合集

    NOIP 2010 提高组合集 T1 机器翻译 模拟题,用一个栈模拟,桶记录即可. #include <iostream> #include <cstdio> #include ...

  4. $NOIp$做题记录

    虽然去年做了挺多了也写了篇一句话题解了但一年过去也忘得差不多了$kk$ 所以重新来整理下$kk$ $2018(4/6$ [X]积木大赛 大概讲下$O(n)$的数学方法. 我是从分治类比来的$QwQ$. ...

  5. $NOIp$提高组历年题目复习

    写在前面 一个简略的\(NOIp\)题高组历年题目复习记录.大部分都有单独写题解,但懒得放\(link\)了\(QwQ\).对于想的时候兜了圈子的题打上\(*\). \(NOIp2018\ [4/6] ...

  6. 模拟--P1540 机器翻译

    题目连接 题目背景 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 题目描述 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单词 ...

  7. 洛谷P1540 机器翻译 水题 模拟

    注意一下细节,尤其是更新minv时不要更新错. Code: #include<vector> #include<iostream> #include<cstdio> ...

  8. (简单模拟)P1540 机器翻译

    题解: #include<iostream>#include<cmath>using namespace std; int main(){ int m,n; cin>&g ...

  9. 【队列+模拟】机器翻译 luogu-1540

    题目描述 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单词,软件会先在内存中查 ...

随机推荐

  1. [linux]vmware中linux虚拟机扩容 标签: vmware虚拟机linux 2016-09-05 08:03 315人阅读 评

    扩容原因 现阶段,虚拟机的标配都是1G内存和20G硬盘,大部分时候是够用的,但是也会出现虚拟机里面东西放多了硬盘不够用的情况,这种情况下,除了清理垃圾,另外就只能给虚拟机扩容了.因为window扩容相 ...

  2. 2016 Asia Jakarta Regional Contest L - Tale of a Happy Man UVALive - 7722

    UVALive - 7722 一定要自己做出来!

  3. 为什么不喜欢在 QQ 群里回答问题?

    为什么不喜欢在 QQ 群里回答问题? 没有主题,主题随时都在变. 回答后无法备份,当然自己有心可以总结一下. 实时性要求太强,可能回答但是突然有事离开,再回头看已经是 几十条的留言. QQ 群用来闲聊 ...

  4. PHPExcel 设置表格边框

    //设置单元格边框 $style_array = array( 'borders' => array( 'allborders' => array( 'style' => \PHPE ...

  5. docker compose安装gitea

    docker-compose.yml version: "3.4" networks: gitea: external: false services: server: image ...

  6. re模块下的常用方法

    一  :  re模块的查找 findall  优先级查找  返回列表 找所有的匹配项(从大段的内容中找匹配到的项目) import re str = "qwer asdf zxcv qwer ...

  7. HTTP协议详解以及URL具体访问过程(转载)

    https://blog.csdn.net/f45056231p/article/details/82533490

  8. 分布式TensorFlow集群local server使用详解

    通过local server理解分布式TensorFlow集群的应用与实现. ​​简介 TensorFlow从0.8版本开始,支持分布式集群,并且自带了local server方便测试. Local ...

  9. logback 打印mybatis sql mybatis 日志打印sql语句和返回结果

    logback 打印sql语句: 在logback日志文件中开启debug模式 <logger name="com.ibatis" level="DEBUG&quo ...

  10. 解决电脑性能一般,打开webstorm后,电脑比较卡的问题

    刚到一公司实习,要求使用webstrom开发前端,但安装后发现自己的电脑很卡,特别是在运行项目时,卡的不要不要的. 后来,发现一奇淫技巧,用sublime代替webstrom,但是没法启动项目啊 找到 ...