起初看到这道题的时候,草草就放过去了,开了另一道题,结果开题不顺利,总是感觉差一点就可以做出来,以至于一直到最后都没能看这道题qaq

题意:类似于操作系统上讲的LRU算法,有两个操作,0操作代表访问其中的块,如果命中,将该块去除放到数组的末尾,未命中则在数组末尾加入当前块,1操作是询问数组中是否存在一个块,存在输出该块的数据,否则输出无效。

分析:考虑到只是对于数组的最后一个元素进行操作,所以可以使用链表进行模拟相关操作,主要的坑点就是时间卡的很紧所以需要加入快读,使用简单的hash将字符串映射成一个值,从而可以得到相应的结果。

#include<bits/stdc++.h>
#define LL long long
#define null 0
using namespace std; namespace io {
char buf[<<], *p1 = buf, *p2 = buf;
inline char gc() {
if(p1 != p2) return *p1++;
p1 = buf;
p2 = p1 + fread(buf, , << , stdin);
return p1 == p2 ? EOF : *p1++;
} #define G getchar template<class I>
inline void read(I &x) {
x = ; I f = ; char c = G();
while(c < '' || c > '') {if(c == '-') f = -; c = G(); }
while(c >= '' && c <= '') {x = x * + c - ''; c = G(); }
x *= f;
} template<class I>
inline void write(I x) {
if(x == ) {putchar(''); return;}
I tmp = x > ? x : -x;
if(x < ) putchar('-');
int cnt = ;
while(tmp > ) {
buf[cnt++] = tmp % + '';
tmp /= ;
}
while(cnt > ) putchar(buf[--cnt]);
} #define in(x) read(x)
#define outn(x) write(x), putchar('\n')
#define out(x) write(x), putchar(' ') } using namespace io; #define ll long long
const int N = ; const int maxn=5e5+;
unordered_map<LL,int >mp;
int x,cnt,xx,op,t,q,cap;
char s[];
LL temp;
struct node
{
node *pre,*next;
LL a;
int data;
node()
{
pre=null;
next=null;
data=;
}
};
node *head,*tail,*p[maxn]; void init()
{
head->next=tail;
tail->pre=head;
}
void insert()
{
cnt++;
p[cnt]->pre=tail->pre;
tail->pre->next=p[cnt];
p[cnt]->next=tail;
tail->pre=p[cnt];
p[cnt]->data=xx;
mp[temp]=cnt;
p[cnt]->a=temp;
}
void del(node *x)
{
x->pre->next=x->next;
x->next->pre=x->pre;
mp[x->a]=;
}
int main()
{
int t;
in(t);
head=new node();
tail=new node();
for(int i=;i<=maxn;i++)
{
p[i]=new node();
}
while(t--)
{
mp.clear();
x=;cnt=;
init();
in(q);
in(cap);
while(q--)
{
in(op);
scanf(" %s",s);
int len=strlen(s);
temp=;
for(int i=;i<len;i++)
{
temp=temp*+s[i]-'';
temp=temp*+len;
}
in(xx);
if(op==)
{
if(mp[temp]==)
{
if(x>=cap)
{
del(head->next);
insert();
outn(xx);
}
else
{
x++;
insert();
outn(xx);
}
}
else
{
outn(p[mp[temp]]->data);
//printf("%d\n",p[mp[temp]]->data);
xx=p[mp[temp]]->data;
del(p[mp[temp]]);
insert();
}
}
else if(op==)
{
if(mp[temp]==)
{
printf("Invalid\n");
}
else
{
if(xx==)
{
outn(p[mp[temp]]->data);
//printf("%d\n",p[mp[temp]]->data);
}
else if(xx==)
{
if(p[mp[temp]]->next==tail)
{
printf("Invalid\n");
}
else
{
outn(p[mp[temp]]->next->data);
//printf("%d\n",p[mp[temp]]->next->data);
}
}
else if(xx==-)
{
if(p[mp[temp]]->pre==head)
{
//outn("Invalid");
printf("Invalid\n");
}
else
{
outn(p[mp[temp]]->pre->data);
// printf("%d\n",p[mp[temp]]->pre->data);
}
}
}
} } }
}

牛客第三场 J LRU management的更多相关文章

  1. 牛客多校第三场J LRU management(双向链表)题解

    题意: 给一个长度为\(m\)的队列,现给定以下操作: \(opt=0\),插入一个串,如果不在队里直接插入栈尾,如果超出\(m\)删队首:在队里就拿出来重新放到队尾,返回\(v\)值. \(opt= ...

  2. 牛客第三场多校 E Sort String

    链接:https://www.nowcoder.com/acm/contest/141/E来源:牛客网 Eddy likes to play with string which is a sequen ...

  3. 牛客第三场多校 H Diff-prime Pairs

    链接:https://www.nowcoder.com/acm/contest/141/H来源:牛客网 Eddy has solved lots of problem involving calcul ...

  4. uestc summer training #9 牛客第三场 BFS计数

    G.coloring tree BFS计数 题目:给你n(<=5000)个节点的一颗树 你有K(<=5000)种颜色 你可以给每一个节点染一种颜色 总共有Kn种染色方法 在一种染色方法中 ...

  5. 牛客第六场 J.Heritage of skywalkert(On求前k大)

    题目传送门:https://www.nowcoder.com/acm/contest/144/J 题意:给一个function,构造n个数,求出其中任意两个的lcm的最大值. 分析:要求最大的lcm, ...

  6. PACM Team(牛客第三场多校赛+dp+卡内存+打印路径)

    题目链接(貌似未报名的不能进去):https://www.nowcoder.com/acm/contest/141/A 题目: 题意:背包题意,并打印路径. 思路:正常背包思路,不过五维的dp很容易爆 ...

  7. Shuffle Cards(牛客第三场+splay)

    题目: 题意:将1~n的数进行m次操作,每次操作将第pi位到pi+si-1位的数字移到第一位,求最后的排列. 思路:现在还没不会写splay,在知道这是splay模板题后找了一波别人的模板,虽然过了, ...

  8. 最长相同01数的子串(map搞搞)--牛客第三场 -- Crazy Binary String

    题意: 如题. 或者用我的数组分治也可以,就是有点愚蠢. //#include <bits/stdc++.h> #include <map> #include <iost ...

  9. 平面割线平分点(构造)--牛客第三场-- Magic Line

    题意: 给你n个点的坐标,让你给出两个点,这两个点的连线可以平分这些点. 思路: 先按y的大小排序,在按x的小排序,再搞一下就行了.如下图: #include <bits/stdc++.h> ...

随机推荐

  1. Spring Boot的学习之路(01):缘起

    有人说,Spring Boot的出现,让Java迎来了又一春,它是Java应用开发的颠覆者,彻底改变了Java应用开发的模式. 2017年,SpringBoot闯入我的生活, 也让我迎来了又一春 我开 ...

  2. 关于学习js的Promise的心得体会

    最近一直在研究js的Promise对象,其中有一篇blog写得比较通俗易懂,转发如下: http://www.cnblogs.com/lvdabao/p/es6-promise-1.html 参照上面 ...

  3. Jenkins持续部署-自动生成版本号

    目录 Jenkins持续部署-自动生成版本号 目录 前言 目的 详细流程 获取SVN Reversion 获取需求号 设置编译前读取版本号 总结 参考文献 Jenkins持续部署-自动生成版本号 目录 ...

  4. .NET开发框架(一)-框架介绍与视频演示

    本文主要介绍一套基于.NET CORE的SPA高并发.高可用的开发框架. 我们暂且称它为:(让你懂.NET)开发框架. 以此为主线,陆续编写教程,讲述如何构建高并发.高可用的框架. (欢迎转载与分享) ...

  5. 工作中vue项目前后端分离,调用后端本地接口出现跨域问题的完美解决

    在我们实际开发中,选择不错的前端框架可以为我们省掉很多时间,当然,有时我们也会遇到很多坑. 最近在做vue项目时就遇到了跨域问题,一般来说,出现跨域我们第一反应使用jsonp,但是这个只支持get请求 ...

  6. 论文研读Unet++

    Unet++: A Nested U-Net Architecture for Medical Image Segmentation Unet++ 论文地址 这里仅进行简要介绍,可供读者熟悉其结构与特 ...

  7. spring cloud 系列第8篇 —— config+bus 分布式配置中心与配置热刷新 (F版本)

    源码Gitub地址:https://github.com/heibaiying/spring-samples-for-all 一.config 简介 spring cloud config 分为服务端 ...

  8. Java学习笔记——设计模式之六.原型模式(浅克隆和深克隆)

    That there's some good in this world, Mr. Frodo. And it's worth fighting for. 原型模式(prototype),用原型实例指 ...

  9. canvas 画布基本操作

    const canvas = document.getElementById('canvas'); // 2.画笔 --- canvas的上下文对象 const ctx = canvas.getCon ...

  10. centos7.3 格式化和挂载数据盘

    本文使用 fdisk 命令对小于 2 TiB 的数据盘执行分区操作. 1.  运行 fdisk -l 命令查看实例是否有数据盘 2.  创建一个单分区数据盘,依次执行以下命令: 运行 fdisk /d ...