列表

详情


OR123. 内存条

描述

在很多存储模型中,内存池是使用循环队列来实现的。一个内存池可以看成一个环型的内存空间。现在有一个大小为L字节的内存池,用户会对它进行读和写两种操作。每次写会从当前存储位置的末尾向后空余的位置写入W比特的数据;每次读会从当前存储位置的开头读取R比特的数据,然后将这些位置的数据释放。所以任意时刻在内存中存储有数据的位置都是连续的一段。

读和写操作是会被堵塞的,比如当剩余的内存空间不足W比特时,写操作就会被堵塞,等待读操作进行直到剩余空间不小于W比特;读操作也是类似。但是存在一种情况,系统会发生死锁,即当前剩余空间不足W比特写操作无法进行;但是当前存储的数据也不足R比特,读操作也无法进行。这时系统就陷入了死锁。现在你需要帮助判断一下某个系统是否有可能发生死锁,初始时内存池是空的。

输入描述

第一行包含三个整数L,R,W。1≤L,R,W≤1018,R,W≤L

输出描述

若会发生死锁,输出DEADLOCK;否则输出OK。

示例1

输入:

5 3 4

输出:

DEADLOCK

示例2

输入:

5 2 3

输出:

OK

原站题解

C 解法, 执行用时: 2ms, 内存消耗: 220KB, 提交时间: 2020-06-20

#include <stdio.h>
#include <stdlib.h>

int main(void) {
	int l,r,w;
	scanf("%d %d %d",&l,&r,&w);
	if(r+w>l)
		printf("DEADLOCK");
	else
		printf("OK");
}

C++14 解法, 执行用时: 2ms, 内存消耗: 220KB, 提交时间: 2019-04-02

#include <stdio.h>
int main()
{
    int L,R,W;
    scanf("%d%d%d",&L,&R,&W);
        if(R+W>L) printf("DEADLOCK\n");
            else printf("OK\n");
    return 0;
}

上一题