[CCPC2019 哈尔滨] L. LRU Algorithm

Description

对一个序列执行 LRU 算法。每次询问给定一个窗口,问它是否出现过。

Solution

很显然我们可以先假设窗口长度无限,匹配时候只匹配前缀就可以了。

然后我准备用普通 HASH 莽过去,发现凉了。

首先可以不使用 HASH 表,而对每个长度存下它的所有 HASH 值,然后暴力枚举看是否相等。

这样的好处就是相等以后可以找到原序列然后确定一下是否真的相等,简称二次判断。

虽然复杂度玄学,但还是 \(982ms\) 卡过去了。

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int M = 5003, MOD = 1000000007;
int t[M],q[M][M],T,n,p,m;
ll h[M][M],val;
int main() {
scanf("%d",&T);
while(T--) {
scanf("%d%d",&n,&p);
for(int i=0;i<=n;i++) {
for(int j=0;j<=n;j++) {
q[i][j]=h[i][j]=0;
}
}
int top=0;
for(int i=1;i<=n;i++) {
for(int j=1;j<=n;j++) q[i][j]=q[i-1][j];
int tmp,pos=0;
scanf("%d",&tmp);
for(int j=1;j<=top;j++) {
if(tmp==q[i][j]) {
pos=j;
break;
}
}
if(pos) {
for(int j=pos;j;j--) q[i][j]=q[i][j-1];
}
else {
for(int j=++top;j;j--) q[i][j]=q[i][j-1];
}
q[i][1]=tmp;
for(int j=1;j<=n;j++) h[i][j]=(h[i][j-1]*(n+1)+q[i][j])%MOD;
}
while(p--) {
scanf("%d",&m);
val=0;
for(int i=1;i<=m;i++) {
scanf("%d",&t[i]);
val=(val*(n+1)+t[i])%MOD;
}
int flag=0;
for(int i=0;i<=n;i++) {
if(h[i][m]==val) {
int fg=1;
for(int j=1;j<=m;j++) {
if(q[i][j]!=t[j]) {
fg=0;
break;
}
}
if(fg) {
flag=1;
break;
}
}
}
puts(flag?"Yes":"No");
}
}
} /*
1
7 5
4 3 4 2 3 1 4
1 4
2 2 3
3 3 2 1
4 4 1 3 2
4 3 4 0 0
*/

[CCPC2019 哈尔滨] L. LRU Algorithm - 哈希的更多相关文章

  1. BZOJ_1212_[HNOI2004]L语言_哈希

    BZOJ_1212_[HNOI2004]L语言_哈希 Description 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的.现在你要处理的就是一段没有标点的文章. 一段文章T是由若干小写 ...

  2. LRU Algorithm Gym - 102394L (HASH)

    LRU Algorithm \[ Time Limit: 1000 ms\quad Memory Limit: 524288 kB \] 题意 给出 \(n\) 个数字和 \(m\) 次查询. 每次询 ...

  3. 【gym102394L】LRU Algorithm(自然溢出哈希)

    题意:给定一个n个数的数字序列,第i个数为a[i],每次操作会将a[i]插入或移到最前端: 1.若a[i]已经在序列中出现过,则将其移到最前端,并删除原出现位置 2.若a[i]未出现过,则直接将其插入 ...

  4. Operating System Memory Management、Page Fault Exception、Cache Replacement Strategy Learning、LRU Algorithm

    目录 . 引言 . 页表 . 结构化内存管理 . 物理内存的管理 . SLAB分配器 . 处理器高速缓存和TLB控制 . 内存管理的概念 . 内存覆盖与内存交换 . 内存连续分配管理方式 . 内存非连 ...

  5. CCPC 2017 哈尔滨 L. Color a Tree && HDU 6241(二分+树形DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6241 题意:给你一棵有 n 个结点的树,每个结点初始颜色都为白色,有 A 个条件:结点 x_i 的黑色 ...

  6. [CCPC2019 哈尔滨] A. Artful Paintings - 差分约束,最短路

    Description 给 \(N\) 个格子区间涂色,有两类限制条件 区间 \([L,R]\) 内至少 \(K\) 个 区间 \([L,R]\) 外至少 \(K\) 个 求最少要涂多少个格子 Sol ...

  7. The 2019 China Collegiate Programming Contest Harbin Site

    题解: https://files.cnblogs.com/files/clrs97/HarbinEditorialV2.zip Code: A. Artful Paintings /* let x= ...

  8. 缓存算法(FIFO 、LRU、LFU三种算法的区别)

    FIFO算法 FIFO 算法是一种比较容易实现的算法.它的思想是先进先出(FIFO,队列),这是最简单.最公平的一种思想,即如果一个数据是最先进入的,那么可以认为在将来它被访问的可能性很小.空间满的时 ...

  9. Redis中的LRU淘汰策略分析

    Redis作为缓存使用时,一些场景下要考虑内存的空间消耗问题.Redis会删除过期键以释放空间,过期键的删除策略有两种: 惰性删除:每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除 ...

随机推荐

  1. setter&getter

    let _age = 4 class Animal { construct (type){ this.type = type } get age(){ return _age } set age(va ...

  2. maven第一次创建项目太慢解决方法

    问题: 第一次用maven创建项目的时候,因为本地仓库中没有jar包,需要从中央仓库下载,所以会比较慢 解决方法: 因为从中央仓库下载默认使用的国外的镜像下载,速度比较慢,我们可以把镜像修改为从阿里云 ...

  3. Centos 7 安装配置git

    Centos 7 安装配置git 1.安装git yum install git 2.验证git git -version 3.配置基本信息

  4. Python 安装 virturalenv 虚拟环境

    返回目录 本篇索引 一.概述 二.Linux下安装Python虚拟环境 三.Windows下安装Python虚拟环境 一.概述 有时候会在一台主机上安装多个不同的Python版本,用以运行不同时期开发 ...

  5. 复习mongoose的基本使用

    mongodb参考 mongoose官网 mongoose用起来更便捷,更方便些

  6. P2048 [NOI2010]超级钢琴 [堆+st表]

    考虑只能取长度为 [L,R] 的,然后不难想到用堆搞. 搞个前缀和的st表,里面维护的是一个 最大值的位置 struct rmq { int mx[N][20] ; void qwq(int n) { ...

  7. UVA11732(Trie树)

    鸣谢https://blog.csdn.net/Baoli1008/article/details/4441936,基本都是抄的代码 #pragma GCC optimize(2) #include ...

  8. C#读取excel时提示“外部数据库驱动程序 (1) 中的意外错误”

  9. 问题 I: 排名

    #include <cstdio> #include <cstring> #include <algorithm> #include <vector> ...

  10. 我的翻译--一个针对TP-Link调试协议(TDDP)漏洞挖掘的故事

    前言 我写这篇文章原本是为了简化WiFi渗透测试研究工作.我们想使用去年由Core Security发布的WIWO,它可以在计算机网络接口和WiFi路由器之间建立一个透明的通道. 研究的第一步,就是选 ...