【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)最近最少使用算法,是用在操作系统中的页面置换算法,因为内存空间是有限的,不可能把所有东西都放进来,所以就必须要有所取舍,我们应该把什 ... 
随机推荐
- Sparsity Invariant CNNs
			文章链接 Abstract 本文研究稀疏输入下的卷积神经网络,并将其应用于稀疏的激光扫描数据的深度信息完成实验.首先,我们表明,即使当丢失数据的位置提供给网络时,传统卷积网络在应用于稀疏数据时性能也很 ... 
- PHP利用pcntl_exec突破disable_functions
			http://fuck.0day5.com/?p=563 PHP突破Disable_functions执行Linux命令 利用dl函数突破disable_functions执行命令 http://ww ... 
- TCP系列15—重传—5、Linux中RTO的计算
			之前我们介绍的都是协议中给出的RTO计算方法,下面我们看一下linux实现中RTO的计算方法.在linux中维护了srtt.mdev.mdev_max.rttvar.rtt_seq几个状态变量用来计算 ... 
- 按Backspace键删除时,会出现^H
			按Backspace键删除时,会出现^H 2014-08-12 19:38 1180人阅读 评论(0) 举报 版权声明:本文为博主原创文章,未经博主允许不得转载. 在linux/unix 平台的经常使 ... 
- RT-thread 设备驱动组件之IIC总线设备
			本文主要介绍RT-thread中IIC总线设备驱动,涉及到的主要文件有:驱动框架文件(i2c_core.c,i2c_dev.c,i2c-bit-ops.c,i2c_dev.h,i2c.h):底层硬件驱 ... 
- BZOJ 1005 明明的烦恼(prufer序列+高精度)
			有一种东西叫树的prufer序列,一个树的与一个prufer序列是一一对应的关系. 设有m个度数确定的点,这些点的度为dee[i],那么每个点在prufer序列中出现了dee[i]-1次. 由排列组合 ... 
- 【bzoj3524】[Poi2014]Couriers  主席树
			题目描述 给一个长度为n的序列a.1≤a[i]≤n.m组询问,每次询问一个区间[l,r],是否存在一个数在[l,r]中出现的次数大于(r-l+1)/2.如果存在,输出这个数,否则输出0. 输入 第一行 ... 
- winform全局异常捕获
			/// <summary> /// 应用程序的主入口点. /// </summary> public static ApplicationContext context; [S ... 
- Linux查看PCIe版本及速率
			Linux查看PCIe版本及速率 PCIE有四种不同的规格,通过下图来了解下PCIE的其中2种规格 查看主板上的PCI插槽 # dmidecode | grep --color "PCI&q ... 
- Git的安装与使用(一)
			闲来无事写了个小demo,想上传到GitHub上,发现得使用git进行上传,所以得先了解下git . 1.git是什么 分布式版本控制器 2.svn与git的区别 svn:是集中式的版本控制系统,版本 ... 
