机器翻译(noip2010)

分析:该题是经典的队列题目,直接用队列实现就可以。如果数据范围大一些的话还可hash判重!

这可以说是一道送分的题目,但是还有粗心的学生会在这里失分,主要原因是数组的范围定义的不合适,因为空间足够用,在考试中数据范围要稍大一些。当然还有个别同学是因为模拟失误了,这种送分题目我只能说,一定要多对拍几组特殊数据,保证得满分才好!

var
  m,n,sum:longint;
  q:array[0..1000] of longint;
  head,tail:longint;
  procedure init;
  var bo:boolean;
  i,j,x:longint;
  begin
    readln(m,n);
    head:=0;tail:=0; sum:=0;
    for i:=1 to n do
      begin
        bo:=false;
        read(x);
        for j:=head+1 to   tail do
          if q[j]=x then
            begin   bo:=true;   break; end;
        if not bo  then
          begin
            if  tail-head>=M then  inc(head);
            inc(tail);  q[tail]:=x;inc(sum);
          end
      end;
      writeln(sum);
  end;
begin
  assign(input,‘translate.in‘);reset(input);
  assign(output,‘translate.out‘); rewrite(output);
  init;
  close(input); close(output);
end.

时间: 2024-10-03 23:28:58

机器翻译(noip2010)的相关文章

[NOIP2010] 提高组 洛谷P1540 机器翻译

题目背景 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 题目描述 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单词,软件会先在内存中查找这个单词的中文含义,如果内存中有,软件就会用它进行翻译:如果内存中没有,软件就会在外存中的词典内查找,查出单词的中文含义然后翻译,并将这个单词和译义放入内存,以备后续的查找和翻译. 假设内存中有M个单元,每单元能存放一个单词和译义.每当软件将一个新单词存入内存前,如果当前内存中已存入的单

NOIP2010 机器翻译

描述 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单词,软件会先在内存中查找这个单词的中文含义,如果内存中有,软件就会用它进行翻译:如果内存中没有,软件就会在外存中的词典内查找,查出单词的中文含义然后翻译,并将这个单词和译义放入内存,以备后续的查找和翻译. 假设内存中有M个单元,每单元能存放一个单词和译义.每当软件将一个新单词存入内存前,如果当前内存中已存入的单词数不超过M-

NOIP2010提高组 机器翻译 -SilverN

1 /**/ 2 #include<iostream> 3 #include<cstdio> 4 #include<cmath> 5 #include<cstring> 6 #include<algorithm> 7 using namespace std; 8 int head=0,tail=0; 9 int t[2000]={0}; 10 int x,c=0; 11 int m,n; 12 int main(){ 13 cin>>

NOIP2010 机器翻译 题解

描述 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单词,软件会先在内存中查找这个单词的中文含义,如果内存中有,软件就会用它进行翻译:如果内存中没有,软件就会在外存中的词典内查找,查出单词的中文含义然后翻译,并将这个单词和译义放入内存,以备后续的查找和翻译. 假设内存中有M个单元,每单元能存放一个单词和译义.每当软件将一个新单词存入内存前,如果当前内存中已存入的单词数不超过M-

1401机器翻译(Noip2010提高组第1题)

1 #include<iostream> 2 using namespace std; 3 int m,n,s=0; 4 int a[1500]; 5 int z[1000]; 6 bool chazhao(int mm,int x) 7 { 8 for(int i=0;i<mm;i++) 9 { 10 if(z[i]==x)return true; 11 } 12 for(int k=0;k<mm-1;k++)z[k]=z[k+1]; 13 z[mm-1]=x; 14 retur

NOIP2010解题报告

NOIP2010题解 第一题:机器翻译 题意是有m个存储单元,每次在里面查找一个单词,如果没查到就要在词典里查,并将单词记录在存储单元内,但如果存储单词数超出了m,就必须将第一个单元内的单词删去,求查词典的次数. 水题,实际就是对队列的操作,稍微要注意的是,如果队列中已经插到了要找的单词,这个单词就不必再次插入队尾. 代码: program translate; var a:array[0..3000]of longint; n,i,m,j,x,t,h,ans,g:longint; begin

noip2010提高组题解

NOIP2010提高组题解 T1:机器翻译 题目大意:顺序输入n个数,有一个队列容量为m,遇到未出现元素入队,求入队次数. AC做法:直接开1000的队列模拟过程. T2:乌龟棋 题目大意:有长度为n的棋盘,每个格子对应一个分数,1,2,3,4的卡片共m张,给出四种卡片各自的数量,求改变出牌顺序能获得的最大分数. 思路:开了一个四维的f[i][j][k][l]来表示每张牌有了几张时的最大分数: F[i][j][k][l]=max(f[i-1][j][k][l],f[i][j-1][k][l],f

NOIP2010 题解

机器翻译 题解:模拟 1 #include <cstdio> 2 #include <cstring> 3 4 const int MAXN = 1000; 5 6 int n, m, cj, now, MinV, MinId, Pri, a[MAXN+10], in[MAXN+10]; 7 8 int main(){ 9 memset(in, -1, sizeof(in)); 10 scanf("%d %d", &n, &m), now = P

GitChat&#183;人工智能 | 除了深度学习,机器翻译还需要啥?

本文开始要写作的时候,翻译圈里出了一个"爆炸性"的事件.6月27日下午,一个同传译员在朋友圈里爆料:某AI公司请这位译员去"扮演"机器同传,制造人工智能取代人工同传的"震撼"效果. 这个事件瞬间在译员群体的朋友圈.微博.微信群引爆了隐忍已久的火药桶.因为过去几个月来,隔三差五就冒出一个号称要取代同声传译的翻译机,尤其是一篇题为<刚刚宣告:同声传译即将消亡!>的微信文章,在六月下旬铺天盖地的充满了一堆有关的或者无关的公众号,不知道带来了