Luogu P1540 机器翻译

思路

大水题,只需要静下心来模拟就行。我一开始做的时候,首先想到滚动数组但是写完之后发现并不符合题目要求。题目要求新加入的单词作为最新的,在时间上属于最后一个。但是如果用滚动数组的话,新加入的单词就成了第一个加入的单词。也就是说会WA。所以直接模拟是最好的办法。每次超出内存后,将每个元素的下标都往前推一格。空出最后一格给新加入的单词

代码

#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

int n, m, data[108], temp, ans, now;
bool vis[1008];

int main() {
    scanf("%d%d", &m, &n);
    memset(data, -1, sizeof(data));
    for(int i=1; i<=n; i++) {
        scanf("%d", &temp);
        if(!vis[temp]) {
            vis[temp] = 1;
            if(now == m) {
                if(data[1] != -1) vis[data[1]] = 0;
                for(int j=2; j<=m; j++)
                    data[j-1] = data[j];
                data[m] = temp;
            }
            else {
                data[++now] = temp;
            }
            ans ++;
        }
    }
    printf("%d", ans);
}

猜你喜欢

转载自www.cnblogs.com/bljfy/p/9316242.html