起初看到这道题的时候,草草就放过去了,开了另一道题,结果开题不顺利,总是感觉差一点就可以做出来,以至于一直到最后都没能看这道题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. javaweb各种框架组合案例(二):maven+spring+springMVC+mybatis

    1.mybatis是比较新的半自动orm框架,效率也比较高,优点是sql语句的定制,管理与维护,包括优化,缺点是对开发人员的sql功底要求较高,如果比较复杂的查询,表与表之间的关系映射到对象与对象之间 ...

  2. pytorch实现yolov3(1) yolov3基本原理

    理解一个算法最好的就是实现它,对深度学习也一样,准备跟着https://blog.paperspace.com/how-to-implement-a-yolo-object-detector-in-p ...

  3. SYN3305A型 小型时统设备

       SYN3305A型  小型时统设备 产品概述 SYN3305A型小型时统设备是由西安同步电子科技有限公司精心设计.自行研发生产的一款高准确度的锁相石英频率标准.内装OCX0恒温晶体振荡器,利用G ...

  4. hgoi#20190513

    T1-Felicity is Coming! 神奇宝贝的进化方案是一个全排列,假设有三种宝可梦,那么对应就可以有: (1,2,3)(1,3,2)(2,1,3)(2,3,1)(3,1,2)(3,2,1) ...

  5. JVM底层实现与总结

    一.类加载器 1.BootstrapClassLoader(启动类加载器) 它主要负责加载%JAVA_HOME%/jre/lib,-Xbootclasspath参数指定的路径以及%JAVA_HOME% ...

  6. 【转】解决Nginx php-fpm配置有误引起的502错误

    转自:https://www.centos.bz/2017/07/nginx-php-fpm-502-error/ 在Ubuntu+Nginx+PHP环境下部署好以后,访问网站报错502,在后台ngi ...

  7. Redis 在java中的使用(登录验证,5分钟内连续输错3次密码,锁住帐号,半小时后解封)(三)

    在java中使用redis,做简单的登录帐号的验证,使用string类型,使用redis的过期时间功能 1.首先进行redis的jar包的引用,因为用的是springBoot,springBoot集成 ...

  8. JSP数据交互(二)

    1.application内置对象 application实现用户之间的数据共享 void setAttribute(String key,Object value) 以key/value的形式保存对 ...

  9. Java多线程(2)线程锁

    多线程访问同一个资源进行读写操作,就很容易出一些问题(比如我们常见的读者写者,生产者消费者模型)所以我们会选择对他们设置信号量或者加锁,来限制同一个时刻只有一个线程对某个对象进行操作. 多线程是一个蛮 ...

  10. BZOJ 2957:楼房重建(分块)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2957 题意:…… 思路:对于每一个块,维护一个单调递增的斜率(因为小于前面的斜率的话是肯定看不见的) ...