[CCPC2019 哈尔滨] L. LRU Algorithm - 哈希
[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 - 哈希的更多相关文章
- BZOJ_1212_[HNOI2004]L语言_哈希
BZOJ_1212_[HNOI2004]L语言_哈希 Description 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的.现在你要处理的就是一段没有标点的文章. 一段文章T是由若干小写 ...
- LRU Algorithm Gym - 102394L (HASH)
LRU Algorithm \[ Time Limit: 1000 ms\quad Memory Limit: 524288 kB \] 题意 给出 \(n\) 个数字和 \(m\) 次查询. 每次询 ...
- 【gym102394L】LRU Algorithm(自然溢出哈希)
题意:给定一个n个数的数字序列,第i个数为a[i],每次操作会将a[i]插入或移到最前端: 1.若a[i]已经在序列中出现过,则将其移到最前端,并删除原出现位置 2.若a[i]未出现过,则直接将其插入 ...
- Operating System Memory Management、Page Fault Exception、Cache Replacement Strategy Learning、LRU Algorithm
目录 . 引言 . 页表 . 结构化内存管理 . 物理内存的管理 . SLAB分配器 . 处理器高速缓存和TLB控制 . 内存管理的概念 . 内存覆盖与内存交换 . 内存连续分配管理方式 . 内存非连 ...
- CCPC 2017 哈尔滨 L. Color a Tree && HDU 6241(二分+树形DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6241 题意:给你一棵有 n 个结点的树,每个结点初始颜色都为白色,有 A 个条件:结点 x_i 的黑色 ...
- [CCPC2019 哈尔滨] A. Artful Paintings - 差分约束,最短路
Description 给 \(N\) 个格子区间涂色,有两类限制条件 区间 \([L,R]\) 内至少 \(K\) 个 区间 \([L,R]\) 外至少 \(K\) 个 求最少要涂多少个格子 Sol ...
- The 2019 China Collegiate Programming Contest Harbin Site
题解: https://files.cnblogs.com/files/clrs97/HarbinEditorialV2.zip Code: A. Artful Paintings /* let x= ...
- 缓存算法(FIFO 、LRU、LFU三种算法的区别)
FIFO算法 FIFO 算法是一种比较容易实现的算法.它的思想是先进先出(FIFO,队列),这是最简单.最公平的一种思想,即如果一个数据是最先进入的,那么可以认为在将来它被访问的可能性很小.空间满的时 ...
- Redis中的LRU淘汰策略分析
Redis作为缓存使用时,一些场景下要考虑内存的空间消耗问题.Redis会删除过期键以释放空间,过期键的删除策略有两种: 惰性删除:每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除 ...
随机推荐
- 离散对数及其拓展 大步小步算法 BSGS
离散对数及其拓展 离散对数是在群Zp∗Z_{p}^{*}Zp∗而言的,其中ppp是素数.即在在群Zp∗Z_{p}^{*}Zp∗内,aaa是生成元,求关于xxx的方程ax=ba^x=bax=b的解, ...
- 【MVC+EasyUI实例】对数据网格的增删改查(下)
前言 继上文对网格加载数据,本文主要阐述对数据增删改的实现. 一.js代码 function Add() { $("#dlg").dialog('open'); $("# ...
- idea中MavenWeb项目不能创建Servlet的解决办法
问题 学习完maven后,用maven创建了一个web项目,然后在这个web项目中创建了一个java文件夹并标记这个目录为源码根目录,当我准备创建一个Servlet的时候发现没有,如下图 解决办法 1 ...
- springboot打成war包并携带第三方jar包
1.修改打包方式为war <packaging>war</packaging> 2.添加第三方依赖的jar到pom 我的第三方jar包在resoueces目录下 ...
- C++ 与String有关的函数!!!
String函数 1.字符串的输入 (1) string s; cin >> s;//碰到空格等分隔符会终端输入 /* string s; cin >> s;//如果输入 he ...
- Ceph集群网络切换
背景:需要对已部署好的Ceph集群切换网络,包含包含公共网络和集群网络 1 关闭所有mon节点的mon服务并修改服务器IP systemctl stop ceph-mon@storage01.serv ...
- Uva12034 (组合数取模)
题意:两匹马比赛有三种比赛结果,n匹马比赛的所有可能结果总数 解法: 设答案是f[n],则假设第一名有i个人,有C(n,i)种可能,接下来还有f(n-i)种可能性,因此答案为 ΣC(n,i)f(n-i ...
- GitHub概述
1 引言 GitHub是为开发者提供Git仓库的托管服务,是一个让开发者与同事.同学及相同兴趣爱好者共享代码的完美场所. GitHub公司总部位于美国旧金山,拥有一只似章鱼又似猫的吉祥物. GitHu ...
- html css二级导航栏
二级导航栏制作: 1.将一级导航栏去除列表样式(list-style:none),并给予浮动,使其横向排列(float:left) 2.给每个li中添加一个<a></a>标签, ...
- [CF1034A] Two Rabbits - 数学
判断能否整除即可 #include <bits/stdc++.h> using namespace std; int x,y,a,b; int main() { int t; ios::s ...