📜  门| GATE-CS-2005 |第 81 题(1)

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

门 | GATE-CS-2005 | 第 81 题

题目描述

有 $n$ 个门和 $n$ 个钥匙,每个门和钥匙都有一把专门的钥匙或专门的锁,要求将钥匙配对门,使得每个门都能被打开。钥匙可以重复使用。每次尝试使用钥匙打开门的操作需要花费单位时间。你的任务是设计一个有效的算法,要求最小化总时间复杂度。

输入格式

输入的第一行包含一个整数 $n$,表示门的个数。

接下来 $n$ 行,每行代表一个门和它对应的钥匙。每行格式为 门 钥匙,中间用空格分隔。如果一行中门和钥匙之间用一个 '-' 进行分隔,那么表示这个门没有对应的钥匙;若门和钥匙之间用一个 '+' 进行分隔,那么表示这个钥匙没有对应的门。

输出格式

输出的第一行包含一个整数,表示需要最少的时间才能完成任务。

接下来若干行,每行表示一次打开门的操作。每行格式为 时间 门 钥匙,中间用空格分隔。时间为负数表示该操作不需要花费时间。

样例输入
4
A a
B -
C b
D c
样例输出
1
1 C b
-1 A a
1 D c
说明

对于这个例子,我们有以下两种解决方案:

  1. A 和 C 都需要钥匙 a,因此我们可以先用时间 1 开 C 的门,再用时间 1 打开 A 的门,再用时间 1 打开 D 的门,总时间为 3。
  2. A 和 C 都需要钥匙 a,因此我们可以先用时间 1 开 A 的门,再用时间 1 开 D 的门,再用时间 1 开 C 的门,总时间为 3。

这里我们选择第一种方案。