zoukankan      html  css  js  c++  java
  • Vijos1774 机器翻译 [模拟]

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

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

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

    代码如下,C++版:

     1 # include <iostream>
     2 # include <cstdio>
     3 # include <cstring>
     4 # include <queue>
     5 using namespace std;
     6 int inq[1005];
     7 int L[1005];
     8 int M,N;
     9 void Init()
    10 {
    11     memset(inq,0,sizeof(inq));
    12     for(int i=0;i<N;i++)
    13         scanf("%d",&L[i]);
    14 }
    15 void Solve()
    16 {
    17     int cnt=0;
    18     int inqnum=0;
    19     queue<int> Q;
    20     for(int i=0;i<N;i++)
    21     {
    22         int temp=L[i];
    23         if(inq[temp]) continue;
    24         else
    25         {
    26             cnt++;
    27             if(inqnum<M)
    28             {
    29                 Q.push(temp);
    30                 inqnum++;
    31                 inq[temp]=1;
    32             }
    33             else
    34             {
    35                 int tt=Q.front();
    36                 inq[tt]=0;
    37                 Q.pop();
    38                 Q.push(temp);
    39                 inq[temp]=1;
    40             }
    41         }
    42     }
    43     printf("%d
    ",cnt);
    44 }
    45 int main()
    46 {
    47     //freopen("in.txt","r",stdin);
    48     //freopen("out.txt","w",stdout);
    49     while(scanf("%d%d",&M,&N)!=EOF)
    50     {
    51         Init();
    52         Solve();
    53     }
    54     return 0;
    55 }

    Python版:

     1 class SQueue():  
     2     def __init__(self,init_len=2):
     3         self._len=init_len
     4         self._elems=[0]*init_len
     5         self._head=0
     6         self._num=0
     7     def is_empty(self):
     8         return self._num==0
     9     def peek(self):
    10         #if self._num==0:
    11         #    raise QueueUnderflow
    12         return self._elems[self._head]
    13     def dequeue(self):
    14         #if self._num==0:
    15         #    raise QueueUnderflow
    16         e=self._elems[self._head]
    17         self._head=(self._head+1)%self._len
    18         self._num-=1
    19         return e
    20     def enqueue(self,e):
    21         if self._num==self._len:
    22             self.__extend()
    23         self._elems[(self._head+self._num)%self._len]=e
    24         self._num+=1
    25     def __extend(self):
    26         old_len=self._len
    27         self._len*=2
    28         new_elems=[0]*self._len
    29         for i in range(old_len):
    30             new_elems[i]=self._elems[(self._head+i)%old_len]
    31         self._elems,self._head=new_elems,0
    32 while True:
    33     try:
    34         M,N=map(int,raw_input().split())
    35         L=map(int,raw_input().split())
    36         inq=[0]*1005
    37         cnt=0
    38         inq_num=0
    39         Q=SQueue()
    40         for i in range(N):
    41             temp=L[i]
    42             #print inq[temp]
    43             if inq[temp]==1:
    44                 continue
    45             else:
    46                 cnt+=1
    47                 if inq_num<M:
    48                     inq_num+=1
    49                     inq[temp]=1
    50                     Q.enqueue(temp)
    51                 else:
    52                     tt=Q.dequeue()
    53                     inq[tt]=0
    54                     Q.peek()
    55                     inq[temp]=1
    56                     Q.enqueue(temp)
    57         print cnt
    58     except:
    59         break
  • 相关阅读:
    sublime text3 安装SublimeCodeIntel插件
    进入博客园的第一天
    .NET之Hangfire快速入门和使用
    图片相似性 d-hash算法 C#实践
    同一个Docker swarm集群中部署多版本的测试环境
    C#创建单链表,翻转单链表
    halcon例程学习 一维测量之矩形边缘
    halcon例程学习 一维测量之弧形边缘
    python 圆曲线
    python pygame黑客帝国的简单实现
  • 原文地址:https://www.cnblogs.com/cnXuYang/p/7144467.html
Copyright © 2011-2022 走看看