Vijos1774 机器翻译 [模拟]
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 机器翻译 [模拟]的更多相关文章
- P1540 机器翻译 模拟
题目背景 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 题目描述 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单词,软件会先 ...
- TZOJ 4813 机器翻译(模拟数组头和尾)
描述 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单词,软件会先在内存中查找这 ...
- NOIP2010 提高组合集
NOIP 2010 提高组合集 T1 机器翻译 模拟题,用一个栈模拟,桶记录即可. #include <iostream> #include <cstdio> #include ...
- $NOIp$做题记录
虽然去年做了挺多了也写了篇一句话题解了但一年过去也忘得差不多了$kk$ 所以重新来整理下$kk$ $2018(4/6$ [X]积木大赛 大概讲下$O(n)$的数学方法. 我是从分治类比来的$QwQ$. ...
- $NOIp$提高组历年题目复习
写在前面 一个简略的\(NOIp\)题高组历年题目复习记录.大部分都有单独写题解,但懒得放\(link\)了\(QwQ\).对于想的时候兜了圈子的题打上\(*\). \(NOIp2018\ [4/6] ...
- 模拟--P1540 机器翻译
题目连接 题目背景 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 题目描述 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单词 ...
- 洛谷P1540 机器翻译 水题 模拟
注意一下细节,尤其是更新minv时不要更新错. Code: #include<vector> #include<iostream> #include<cstdio> ...
- (简单模拟)P1540 机器翻译
题解: #include<iostream>#include<cmath>using namespace std; int main(){ int m,n; cin>&g ...
- 【队列+模拟】机器翻译 luogu-1540
题目描述 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单词,软件会先在内存中查 ...
随机推荐
- ORA-03113: end-of-file on communication channel 解决方案
Oracle启动时报如下错误:ORA-03113: end-of-file on communication channel 解决方案如下:1.查看orcle启动日志,确定具体是什么原因引起的错误. ...
- myeclipse的最有用的设置
1 取消Myeclipse的自动文件验证(卡傻的原因) Windows –> Perferences –>Myeclipse –> Validation,保留manual(手动) ...
- Python 3.x版本中的字符串
- mysql 计算两个时间之间有多少分钟
SELECT TIMESTAMPDIFF(MINUTE, (DATE_FORMAT('2015-08-12 10:38:00','%Y-%m-%d %H:%i')), (DATE_FORMAT('20 ...
- 阿里大数据产品Dataphin上线公共云,将助力更多企业构建数据中台
日前,由阿里数据打造的智能数据构建与管理Dataphin,重磅上线阿里云-公共云,开启智能研发版本的公共云公测!在此之前,Dataphin以独立部署方式输出并服务线下客户,已助力多家大型客户高效自动化 ...
- Hbase数据模型物理视图
- IP地址、域名、DNS、URL图解
- Install Openjdk11 to Ubuntu 18.04 LTS
Ubuntu 18.04 LTS系统上通过sudo apt install openjdk-11-*命令安装的jdk11版本依然是jdk10,怎么样才能安装openjdk 11呢,今天,我们就来完 ...
- Flex AIR应用GPS定位功能(Android和IOS)
说明: 使用AIR进行GPS定位功能实现时,会经常判断GPS是否打开.一般的官方或者书上的介绍的方法,测试后,只能对Android系统进行判断,而对ios系统则无法进行判断. 经过研究测试,终于解决实 ...
- POJ 2763"Housewife Wind"(DFS序+树状数组+LCA)
传送门 •题意 一对夫妇居住在 xx村庄,给村庄有 $n$ 个小屋: 这 $n$ 个小屋之间有双向可达的道路,不会出现环,即所构成的图是个树: 从 $a_i$ 小屋到 $b_i$ 小屋需要花费 $w_ ...