洛谷P1540 机器翻译

本文介绍了一种利用双端队列(Deque)实现最近最少使用(LRU)缓存算法的方法。当缓存达到预设容量时,算法会自动移除最久未使用的数据项,为新数据腾出空间。通过遍历队列检查重复数据,并在必要时更新队列状态,确保了缓存的有效性和高效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原题链接
思路:
这是一到很简单的题,根据题目中说的“假设内存中有M个单元,每单元能存放一个单词和译义。每当软件将一个新单词存入内存前,如果当前内存中已存入的单词数不超过M−1,软件会将新单词存入一个未使用的内存单元;若内存中已存入M个单词,软件会清空最早进入内存的那个单词,腾出单元来,存放新单词。”就很容易想到这是队列,然后有涉及到遍历数据,所以我选择deque;
0.在输入N个非负整数num时,每输一个num,就遍历队列arr检查是否是“新单词”,不是就按照题目规定插入队列末尾;
1.记录存入数据的次数,输出;

int main() {
	int m, n;
	sfd(m);
	sfd(n);
	deque<int> arr;
	int len, num, cnt = 0;
	while( n-- ) {
		sfd(num);
		len = arr.size();
		int i;
		for( i=0; i<len; i++ ) {
			if( num==arr[i] ) {
				break;
			}
		}
		if( i>=len ) {
			if( len<m ) {
				arr.push_back(num);
			}else {
				arr.pop_front();
				arr.push_back(num);
			}
			cnt++;
		}
		
	}
//	for( int i=0; i<arr.size(); i++ ) {
//		pfd(arr[i]);
//		pfk;
//	}
	pfd(cnt);
	
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值