经典面替换算法,每次选择最远的那个碟片请求进行替换。

AC代码

#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <utility>
#include <string>
#include <iostream>
#include <map>
#include <set>
#include <vector>
#include <queue>
#include <stack>
using namespace std;
#pragma comment(linker, "/STACK:1024000000,1024000000")
#define eps 1e-10
#define inf 0x3f3f3f3f
#define PI pair<int, int>
typedef long long LL;
const int maxn = 10000 + 5;
queue<int>pos[maxn];
int a[105], driv[15];
int k, n;

int solve() {
	int ans = 0, cnt = 0;
	for(int i = 0; i < n; ++i) {
		int ok = 0;
		for(int j = 0; j < cnt; ++j) {
			if(driv[j] == a[i]) {
				ok = 1;
				break;
			}
		}
		if(!ok) {
			++ans;
			if(cnt < k) {
				driv[cnt++] = a[i];
			}
			else if(cnt == k) {
				int ind = 0, far = -1;
				for(int j = 0; j < k; ++j) {
					int p = pos[driv[j]].empty() ? inf : pos[driv[j]].front();
					if(p > far) {
						ind = j;
						far = p;
					}
				}
				driv[ind] = a[i];
			}
		}
		pos[a[i]].pop();
	}
	return ans;
}

int main() {
	int T;
	scanf("%d", &T);
	while(T--) {
		scanf("%d%d", &k, &n);
		for(int i = 0; i < n; ++i) {
			scanf("%d", &a[i]);
			pos[a[i]].push(i);
		}
		printf("%d\n", solve());
	}
	return 0;
}

如有不当之处欢迎指出!

最新文章

  1. 自定义struts实现
  2. Robot Framework--01 创建简单工程示例
  3. Web 开发中 20 个很有用的 CSS 库
  4. 学习simple.data之基础篇
  5. Android日期时间格式国际化
  6. sessionStorage 、localStorage 和 cookie 之间的区别(转)
  7. winform 实现选择的城市名单
  8. 201521123056 《Java程序设计》第7周学习总结
  9. linux 巨页使用测试以及勘误1
  10. C# String StringBuilder 区别
  11. 喜怨交加C++
  12. jenkins pipline 发送邮件
  13. 小程序和H5互调
  14. PHP + JS 实现大文件分割上传
  15. 如何让一个Java新手快速入门?
  16. 从工程化角度讨论如何快速构建可靠React组件
  17. 在后台运行rtorrent
  18. 如何生成.p12文件
  19. linux后台启动程序脚本实例
  20. MySQL原生API、MySQLi面向过程、MySQLi面向对象、PDO操作MySQL

热门文章

  1. webpack + vue
  2. ueditor表格边框没有颜色的解决
  3. MySQL存储过程中declare和set定义变量的区别
  4. 【转】Linux shell笔记
  5. Docker之容器
  6. C++的string类
  7. 钉钉自定义机器人配合SVN钩子事件进行消息的推送实践
  8. 安装supervisor
  9. iOS-iOS调用相机调用相册【将图片保存到本地相册】
  10. WPF: 只读依赖属性的介绍与实践