首页 > 其他分享 >洛谷题单指南-线性表-P1540 [NOIP2010 提高组] 机器翻译

洛谷题单指南-线性表-P1540 [NOIP2010 提高组] 机器翻译

时间:2024-03-12 09:57:06浏览次数:20  
标签:线性表 NOIP2010 int 机器翻译 单词 队列 flag 内存 P1540

原题链接:https://www.luogu.com.cn/problem/P1540

题意解读:本题模拟内存的调入调出,内存先入先出的特性就是队列。

解题思路:

本题需要两种数据结构:队列、数组

队列用来模拟内存的操作,数组充当hash表用于判断单词在内存是否存在

核心逻辑:对于每一个单词,如果内存不存在,查一次词典,再将单词存入内存,如果内存满要先清除最早进入的单词。

100分代码:

#include <bits/stdc++.h>
using namespace std;

queue<int> q;
int flag[1005];
int ans;

int main()
{
    int m, n, x;
    cin >> m >> n;
    while(n--)
    {
        cin >> x;
        if(!flag[x]) //如果x不在内存
        {
            ans++; //查词典
            if(q.size() >= m) //如果队列已满,清除最早进入的单词
            {
                flag[q.front()] = false;
                q.pop();
            } 
            q.push(x);
            flag[x] = true;
        }
    }
    cout << ans;

    return 0;
}

 

标签:线性表,NOIP2010,int,机器翻译,单词,队列,flag,内存,P1540
From: https://www.cnblogs.com/jcwy/p/18067654

相关文章

  • 【算法】【线性表】【链表】合并 K 个升序链表
    1 题目给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例1:输入:lists=[[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[1->4->5,1->3->4,2->6]将它们合并到一个有序链表中得到。1-......
  • 洛谷题单指南-线性表-P1160 队列安排
    原题链接:https://www.luogu.com.cn/problem/P1160题意解读:本题是双向链表的模拟题,要快速实现M个节点的删除,用数组模拟链表是最佳做法。解题思路:双向链表关键要实现好两个操作:voidadd(intk,intv);//在第k个节点后增加第v的号节点,即在k号同学右边插入v号同学voiddel(int......
  • 洛谷题单指南-线性表-P1996 约瑟夫问题
    原题链接:https://www.luogu.com.cn/problem/P1996题意解读:约瑟夫问题是队列的典型应用。解题思路:n个人围圈报数,可以直接基于数组实现循环队列操作,再定义额外数组记录每个人是否已经出圈即可。更直观的做法,定义队列,初始放入1~n,然后重复n次,每次从1~m报数,如果报数到m,直接出队,......
  • 洛谷题单指南-线性表-P3613 【深基15.例2】寄包柜
    原题链接:https://www.luogu.com.cn/problem/P3613题意解读:此题很容易想成用二维数组求解,但是最多有10^5*10^5个寄包柜格子,二维数据会爆空间,题目明确各自一共不超过10^7,所以需要动态数据结构vector。解题思路:vector的问题在于需要提前明确空间大小,才能进行随即访问操作,否则可......
  • 洛谷题单指南-线性表-P3156 【深基15.例1】询问学号
    原题链接:https://www.luogu.com.cn/problem/P3156解题思路:简单的数组题,唯一需要注意的是读写的数据量比较大,输入输出最好用scanf、printf100分代码:#include<bits/stdc++.h>usingnamespacestd;constintN=2e6+5;inta[N],n,m;intmain(){scanf("%d%d",&......
  • P1525 [NOIP2010 提高组] 关押罪犯
    原题链接题解1:按边权从大到小排序,如果这条边的两个点没确定关系,那么把他们设为敌人这样,就成了一棵棵最大生成树(因为有的罪犯之间没有怨气)由敌人的敌人是朋友可以得出,如果两个点在同一棵树,且距离为偶数,那么代表他们之间互为朋友code1#include<bits/stdc++.h>usingnamespace......
  • 数据结构-线性表
    线性表由n(n>=0)个数据特性相同的元素构成的有限序列,称为线性表。他是最基本、最简单、也是最常用的一种数据结构。线性表结构中,数据元素之间通过一对一首尾相接的方式连接起来。特点:存在唯一一个被称为“第一个”的数据元素存在唯一一个被成为“最后一个”的数据元素。除了......
  • 使用数组实现一个线性表
    线性表的存储结构顺序表:静态存储分配,编译时确定容量(相当于数组,如Javanewint[5]),用一段地址连续的存储单元依此存储线性表的数据元素如何实现一个线性表方法接口对于线性表中一些常用的方法,这些方法是线性表中经常使用的publicinterfaceListMethods<T>{voidclear......
  • 向量的线性表示
    前言典例剖析【2024高一专项】在正方形\(ABCD\)中,\(M\)是\(BC\)的中点,若\(\overrightarrow{AC}\)\(=\)\(\vec{m}\),\(\overrightarrow{AM}\)\(=\)\(\vec{n}\),则\(\overrightarrow{BD}\)=【\(\qquad\)】$A.4\vec{m}-3\vec{n}$$B.4\vec{m}+3\vec{n}$$C.......
  • 数据结构·线性表
    线性表一、逻辑结构和基本操作1.逻辑结构具有相同数据类型的n个数据元素的有限序列,表长n,n=0为空表表头:第一个元素表尾:最后一个元素除第一个元素外,每个元素有且仅有一个直接前驱除最后一个元素外,每个元素有且仅有一个直接后继2.基本操作initList(&L);len(L);locateE......