P1540 机器翻译
思路分析
定义两个一维数组 a[ ],b[ ] 分别存放文章的所有单词和内存中的单词;设置一个循环遍历文章的所有单词,每个单词有 2 种情况:1、内存中有这个单词;2、内存中没有这个单词;如果内存中有这个单词则不用查找或存入内存,直接进入下次循环;如果内存中没有这个单词则要到词典中查找并存入内存,如果内存未满则直接存入内存,如果内存已满则要删除内存中第一个单词再存入内存;记录下查找的次数即为本题答案;
注意事项
由题可知:对于10%的数据有 M=1,N≤5;对于100%的数据有1≤M≤100,1≤N≤1000;所以数组定义为 a[1003], b[102];单词存入数组必须按照题目要求存放,不能打乱顺序;
代码实现
#include <stdio.h>
int main(){
int M
, N
;
int i
, j
;
int l
= 0, count
= 0, flag
= 0;
int a
[1003], b
[102];
scanf("%d%d", &M
, &N
);
for(i
= 0; i
< N
; i
++)
scanf("%d", &a
[i
]);
for(i
= 0; i
< N
; i
++){
for(j
= 0; j
< l
; j
++){
if(a
[i
] == b
[j
]){
flag
= 1;
break;
}
}
if(flag
== 1){
flag
= 0;
continue;
}
else if(l
< M
){
l
++;
b
[l
-1] = a
[i
];
count
++;
}
else{
for(j
= 0; j
< l
-1; j
++)
b
[j
] = b
[j
+ 1];
b
[l
-1] = a
[i
];
count
++;
}
}
printf("%d", count
);
return 0;
}