【BZOJ4837】LRU算法 [模拟]
LRU算法
Time Limit: 6 Sec Memory Limit: 128 MB
[Submit][Status][Discuss]
Description
Input
Output
对于每组测试数据,输出一行一个非负整数,表示这组数据的答案。
Sample Input
5 10
0 1 1 5
5 10
0 1 1 10
Sample Output
1135
HINT
1≤n≤10^5, 1≤q≤10^6
0≤x_1,A,B<p, 1≤p≤10^6+3
Main idea
队列元素个数上限为n。每次加入一个元素x,
1.如果x不在队列中:
1.如果队列没满,把x放在队尾;
2.如果队列元素满了,把队头删掉,x放在队尾。
2.如果x在队列中:
把x删掉,把x扔到队尾。
定义val为当前队列中所有元素和,求Σi*val。
Solution
直接用数组模拟即可,我们设定PD[i]表示 i 这个位置是否有元素,pos[i]表示元素 i 所在的位置,然后用一个 q 表示当前队列。
那么显然删除队头的话,只要删除当前第一个有元素的位置,加入的话扔在队尾即可。
中间用num、val记录元素个数以及元素和即可。
(至于对2^64取模,就是unsigned long long自然溢出即可。)
Code
#include<iostream>
#include<string>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<vector>
using namespace std;
typedef unsigned long long ull; const int ONE = 1e5+;
const int INF = ; int T;
int n,m;
int x,A,B,p;
int PD[],pos[];
int q[];
int Ans; inline int get()
{
int res=,Q=; char c;
while( (c=getchar())< || c>)
if(c=='-')Q=-;
if(Q) res=c-;
while((c=getchar())>= && c<=)
res=res*+c-;
return res*Q;
} void Solve()
{
n=get(); m=get();
x=get(); A=get(); B=get(); p=get();
ull Ans = , val = ;
int tou=, wei=, num=; for(int i=;i<=max(n,m);i++) PD[i] = ;
for(int i=;i<=p;i++) pos[i] = ;
for(int i=;i<=m;i++)
{
if(!pos[x])
{
if(num == n)
{
while(!PD[tou]) tou++;
pos[q[tou]] = ; PD[tou] = ;
val -= q[tou]; num--;
}
q[++wei] = x;
pos[x] = wei; PD[wei] = ;
val+=x; num++;
} else
{
q[++wei] = x;
PD[pos[x]] = ; pos[x] = wei; PD[pos[x]] = ;
} x = ((long long)A*x%p + B) % p;
Ans += i*val;
} cout<<Ans<<endl;
} int main()
{
T=get();
while(T--)
Solve();
}
【BZOJ4837】LRU算法 [模拟]的更多相关文章
- 使用java.util.LinkedList模拟实现内存页面置换算法--LRU算法
一,LRU算法介绍 LRU是内存分配中“离散分配方式”之分页存储管理方式中用到的一个算法.每个进程都有自己的页表,进程只将自己的一部分页面加载到内存的物理块中,当进程在运行过程中,发现某页面不在物理内 ...
- python模拟页面调度LRU算法
所谓LRU算法,是指在发生缺页并且没有空闲主存块时,把最近最少使用的页面换出主存块,腾出地方来调入新页面. 问题描述:一进程获得n个主存块的使用权,对于给定的进程访问页面次序,问当采用LRU算法时,输 ...
- 虚存管理页面置换算法 — FIFO和RUL算法模拟实现
本篇博文为追忆以前写过的算法系列第一篇(20081021) 温故知新 目的: 为了解决内存容量有限与多作业执行的冲突.运用了虚拟存储技术.能从逻辑上对内存进行扩充,达到扩充内存的效果.分页存储管理是实 ...
- FIFO调度算法和LRU算法
一.理论 FIFO:先进先出调度算法 LRU:最近最久未使用调度算法 两者都是缓存调度算法,经常用作内存的页面置换算法. 打一个比方,帮助你理解.你有很多的书,比如说10000本.由于你的书实在太多了 ...
- 【Redis 设置Redis使用LRU算法】
转自:http://ifeve.com/redis-lru/ 本文将介绍Redis在生产环境中使用的Redis的LRU策略,以及自己动手实现的LRU算法(php) 1.设置Redis使用LRU算法 L ...
- 关于LRU算法(转载)
原文地址: http://flychao88.iteye.com/blog/1977653 http://blog.csdn.net/cjfeii/article/details/47259519 ...
- Android图片缓存之Lru算法
前言: 上篇我们总结了Bitmap的处理,同时对比了各种处理的效率以及对内存占用大小.我们得知一个应用如果使用大量图片就会导致OOM(out of memory),那该如何处理才能近可能的降低oom发 ...
- 缓存淘汰算法--LRU算法
1. LRU1.1. 原理 LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是"如果数据最近被访问过,那么将来被访问的几率也 ...
- 借助LinkedHashMap实现基于LRU算法缓存
一.LRU算法介绍 LRU(Least Recently Used)最近最少使用算法,是用在操作系统中的页面置换算法,因为内存空间是有限的,不可能把所有东西都放进来,所以就必须要有所取舍,我们应该把什 ...
随机推荐
- Uva 1600 Patrol Robot (BFS 最短路)
这道题运用的知识点是求最短路的算法.一种方法是利用BFS来求最短路. 需要注意的是,我们要用一个三维数组来表示此状态是否访问过,而不是三维数组.因为相同的坐标可以通过不同的穿墙方式到达. #inclu ...
- [基于NetCore的简单博客系统]-登录
0-项目背景 一个基于.NET CORE RAZOR PAGES的简单博客系统 技术栈全部采用微软官方实现方式,目的是熟悉新技术 项目地址:https://github.com/ganqiyin/BL ...
- iOS- <项目笔记>项目配置常见文件
项目常见文件 1.main.m * 里面有一个程序的入口:main函数 2.Prefix.pch文件 * pch文件中的内容能被项目中的其他任何文件共享\包含\访问 * 如果定义的内容只用在OC环境中 ...
- OSG学习:位置变换节点示例
osg::PositionAttitudeTransform节点. #include <osgViewer\Viewer> #include <osg\Node> #inclu ...
- ci tp重定向
server { listen 80; #listen [::]:80; server_name tpblog.yeves.com; index index.html index.htm index. ...
- c++读取文件夹及子文件夹数据
这里有两种情况:读取文件夹下所有嵌套的子文件夹里的所有文件 和 读取文件夹下的指定子文件夹(或所有子文件夹里指定的文件名) <ps,里面和file文件有关的结构体类型和方法在 <io.h ...
- 如何在存储过程中执行set命令 我来答
1.EXEC使用EXEC命令两种用种执行存储程另种执行态批处理所讲都第二种用 面先使用EXEC演示例,代码1DECLARE @TableName VARCHAR(50),@Sql NVARCHAR ( ...
- 【bzoj4008】[HNOI2015]亚瑟王 概率dp
题目描述 $n$ 张牌,$r$ 轮游戏,每轮从左向右操作,遇到第 $i$ 张牌有 $p_i$ 的概率选中,选中会产生 $d_i$ 的贡献,丢弃掉该牌并结束这一轮,否则继续下一张.问最终的期望贡献. 输 ...
- 数据库sharding,横向扩展
学习资料如下: http://www.cnblogs.com/skyme/p/3459765.html http://my.oschina.net/anthonyyau/blog/307165 htt ...
- 【逆序对相关/数学】【P1966】【NOIP2013D1T2】 火柴排队
传送门 Description 涵涵有两盒火柴,每盒装有 $n$ 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为:$ \sum ...