NOIP 2010 C++提高组 复赛第一题 :机器翻译 要求:代码+注释+算法分析 150

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

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

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

输出共1行,包含一个整数,为软件需要查词典的次数。
样例输入 Sample Input

3 7

1 2 1 5 4 4 1
样例输出 Sample Output

5
数据范围及提示 Data Size & 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次词典。

【数据范围】 对于10%的数据有M=1,N≤5。 对于100%的数据有0≤100,0≤1000。
#include <cstdio>
#include <cstring>
int s[1010],k[1010];
int n,m,v=0,ans=0;
int main()
{
scanf("%d %d",&m,&n);//输入 m,n
memset(s,-1,sizeof(s));//初始化数组
memset(k,-1,sizeof(k));
for(int i=1;i<=n;i++)
{
int x;scanf("%d",&x);
if(k[x]==-1)//如果单词未出现过
{
ans++;//总计数
v++;//内存计数
if(v>m)v=1;//如果内存爆了 ,重新计数
k[s[v]]--;// ?
s[v]=x; // ?
k[x]++;//将此数标记为“出现过 ”
}
}
printf("%d",ans);//输出
}

代码我找到了,但是里面有两句话一直看不懂,回答问题的只需帮我解释这两句便可采纳
展开
 我来答
匿名用户
2017-02-16
展开全部
#include <iostream>

using namespace std;

int main()
{
bool f=false;//
int t,i,j,n,z=1,l=1,x=1,m;
int b[1005]={};//内存
cin>>n>>m;
cin>>t;
b[1]=t;
for(i=2;i<=m;i++)
{
cin>>t;//输入单词
for(j=1;j<=l;j++)
if(b[j]==t)
break;//内存中有这个单词
if(j==l+1)//没有这个单词
{
x++;
if(!f)
{
z++;
l++;
if(l==n)
f=true;
b[z]=t;
}
else
{
z++;
if(z==n+1)
z=1;
b[z]=t;
}
}
for(j=1;j<=n;j++)
cout<<b[j]<<" ";
cout<<endl;
}
cout<<x<<endl;
system("pause");
return 0;
}
追问
我修改了问题,麻烦帮忙看一下,谢谢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式