当前位置: 代码迷 >> 综合 >> 1015. 查词典
  详细解决方案

1015. 查词典

热度:51   发布时间:2023-12-06 11:30:40.0

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
思考(与本题关系不大
主要是想通过这道题记录一下queue的模板
感觉之前为了赶进度有点丢掉了自己的初心
之前的想法就是看懂这个代码到底在干什么,然后完全脱离于教材上C语言的写法,自己写C++。由于我C++的部分知识的缺乏+为了赶进度,所以就搞出了不伦不类的一些代码…这种情况还是应该被避免的
思路:
至于本题的操作还是挺简单的,只要搞个vis[]判断一下是否在缓存里即可

第一种:左闭右开

#include <cstdio>
#include <iostream>
using namespace std;
int m,n;
bool vis[111111111];
struct QUEUE
{
    int head,tail,data[11111];void init(){
    head=0,tail=0;}int size(){
    return tail-head;}int front(){
    return data[head];}int back(){
    return data[tail-1];}void pop(){
    head++;}void push(const int &x){
    data[tail]=x;tail++;}
}qu;
int main()
{
    cin>>m>>n;int ans=0;for(int i=1;i<=n;i++){
    int x;cin>>x;if(vis[x]) continue;if(qu.size()==m){
    vis[qu.front()]=0;qu.pop();qu.push(x);vis[x]=1;ans++;}else{
    qu.push(x);vis[x]=1;ans++;}}cout<<ans<<endl;return 0;
}

第二种:

#include <bits/stdc++.h>
using namespace std;
int n,m;
bool vis[111111111];
struct QUEUE
{
    int head,tail,data[11111];void init(){
    head=1,tail=0;}int size(){
    return tail-head+1;}int front(){
    return data[head];}int back(){
    return data[tail];}void pop(){
    head++;}void push(const int &x){
    data[++tail]=x;}
}qu;
int main()
{
    cin>>m>>n;int ans=0;for (int i=1;i<=n;i++){
    int x;cin>>x;if (vis[x]) continue;if (qu.size()==m){
    vis[qu.front()]=false;qu.pop();qu.push(x);vis[x]=true;ans++;}else{
    vis[x]=true;qu.push(x);ans++;}}cout<<ans<<endl;return 0;
}