纯水题,维护一个列队,作为内存列队,并且写两个操作:进列队、出列队;因为数据量十分的小(n<=1000)所以可以维护一个用于标记的数组,如果单词在列队中则置为1,不在则置为0,接着就是暴力——模拟就是。
int queue[1001];
int used[1001];
int tail, head;
int ans = 0;
void enqueue(int n)
{
ans++;
queue[tail++] = n;
used[n] = 1;
}
int exqueue(void)
{
used[queue[head]] = 0;
return queue[head++];
}
int main(void)
{
int i, j;
int m, n;
scanf("%d%d", &m, &n);
for(i = 0; i < n && tail – head != m; i++){
scanf("%d", &j);
if(!used[j]){
enqueue(j);
}
}
while(i < n){
scanf("%d", &j);
if(!used[j]){
exqueue();
enqueue(j);
}
i++;
}
printf("%d\n", ans);
return 0;
}