📜  门|门 CS 1999 |第 67 题(1)

📅  最后修改于: 2023-12-03 15:28:47.835000             🧑  作者: Mango

题目

  • 题目名称:门
  • 题目编号:CS 1999
  • 题目类型:模拟
题目描述

你现在需要模拟一个程序,这个程序的主要功能是打开和关闭门。

门分为两种类型:有锁门和无锁门。

有锁门需要输入密码才能打开,密码是一个不大于 $10^6$ 的正整数。每输入一个错误密码,需要等待 $5$ 秒钟才能再次输入密码。

无锁门不需要密码,但每次只能被打开一段 $t$ 秒钟的时间。

门的操作有两种:

  • 打开门(open)
  • 关闭门(close)

在打开或关闭门的时候,需要确保门的状态是合法的:

  • 如果门是有锁的,则需要输入正确的密码才能打开门。
  • 如果门是无锁的,则不能在未到开门时间或已过开门时间的情况下打开门。
输入格式

第一行一个整数 $T$,表示测试数据的组数。

每组数据的第一行为 $n$,表示门的个数。

接下来 $n$ 行描述每扇门,每行包括四个整数:门的类型(0 表示无锁门,1 表示有锁门)、开门的时间(秒)、关门的时间(秒)、门的密码(如果是无锁门,则为 $0$)。

接下来的若干行是门的操作,每行包括三个整数:门的序号、操作类型(0 表示打开门,1 表示关闭门)、操作的时间(秒),保证时间在区间 $[0, 10^9]$ 中。

输出格式

对于每组数据,输出一行 Case #x:,其中 $x$ 是数据的编号($1$ 开始)。

对于每个操作,按照以下格式输出:

  • 如果操作合法,输出 Door #x is open.Door #x is close.,其中 $x$ 是门的序号。
  • 如果操作不合法,输出 Door #x cannot be opened.Door #x cannot be closed.,其中 $x$ 是门的序号。
输入样例
1
2
0 10 20 0
1 30 40 12345
0 0 5
1 0 12345
0 10 15
1 30 35
0 20 25
1 35 40
输出样例
Case #1:
Door #1 is open.
Door #2 cannot be opened.
Door #1 cannot be closed.
Door #2 is open.
Door #1 is open.
Door #2 cannot be opened.
Door #1 is close.
Door #2 cannot be closed.

说明

这是一个关于模拟的经典问题,需要模拟门的打开和关闭过程,在每次操作门之前需要先检查门的状态是否合法,然后根据门的属性进行操作。

如果门是有锁的,则需要比较输入的密码和门的密码是否相等,这可以使用条件语句进行判断。如果密码错误,则需要等待一段时间后重新输入密码,这可以使用计时器进行计时。

如果门是无锁的,则需要比较当前时间是否在开门时间的范围内,这可以使用条件语句进行判断。

需要注意的是,不同的门可能会在同一时间被同时操作,因此需要使用一个数据结构(如队列)来保存每个门的操作记录,然后按照时间顺序进行模拟。