K. git

内存限制:256 MiB 时间限制:1000 ms 标准输入输出
题目类型:传统 评测方式:文本比较

题目描述

本题的数据比较小,不需要精巧的做法就能通过。

想挑战一下的可以前往git --challenge体验高强度测试。

版本管理是一个很神奇也很有用的东西。接下来你需要实现一个能支持如下指令的版本管理系统:

(本题的文件并不存在内容)

(关于指令的若干限定,见页末“数据范围”部分)

文件

  1. add [name] 在当前版本添加一个新文件name。
  2. lnk [name1] [name2] 在当前版本中,为文件name2添加一个快捷方式,叫做name1。文件本身和其快捷方式的更新次数(见下文)共享同一个值,始终保持相等,会被同时修改。
  3. edt [name] 将当前版本的name文件(或快捷方式)的更新次数增加1。更新次数的初始值为0。
  4. ren [name1] [name2] 将名为name1的文件(或快捷方式)重命名为name2。此后可以创建新的名为name1的文件。

版本

  1. new [ver] 为当前版本创建一个名叫ver的备份版本。
  2. ldv [ver] 加载ver版本,将文件(包括快捷方式)的个数,名称,修改次数,均恢复到创建ver时的状态。

询问

  1. qav [ver] 按照字典序输出ver版本的每个文件(包括快捷方式)及其更新次数。
  2. qam 按照字典序输出当前版本的每个文件(包括快捷方式)及其更新次数。

输入格式

每行一条指令。指令的组成部分由空格分开,每个文件命名仅由字母和数字构成,长度在10字符以内。

输出格式

询问的每个文件输出一行,以>>(这里有个空格)开始,其后依次是用空格隔开的文件名和更新次数。

样例

为了方便观察,以下输出中,输入也按照顺序合并在一起。

样例1

输入

add f1
qam
edt f1
qam
lnk f2 f1
qam
new v1
edt f2
qam
qav v1

输入和输出

add f1
qam
>> f1 0
edt f1
qam
>> f1 1
lnk f2 f1
qam
>> f1 1
>> f2 1
new v1
edt f2
qam
>> f1 2
>> f2 2
qav v1
>> f1 1
>> f2 1

样例2

输入

add f1
add f2
lnk f3 f1
edt f1
qam
ren f1 newF1
qam
lnk f1 f2
qam

输入和输出

add f1
add f2
lnk f3 f1
edt f1
qam
>> f1 1
>> f2 0
>> f3 1
ren f1 newF1
qam
>> f2 0
>> f3 1
>> newF1 1
lnk f1 f2
qam
>> f1 0
>> f2 0
>> f3 1
>> newF1 1

数据范围与提示

重命名快捷方式不会改变原文件的名字。重命名原文件不会更改快捷方式的名字。任何指令的修改都不会中断两者的连接关系。

快捷方式和原文件的更新次数始终保持一致,进行edt时,关联在一起的文件更新次数同时增加。

快捷方式也是一种文件,对文件有效的操作均对快捷方式有效。

任何指令进行的修改不会影响其他版本,版本备份被创造后不会被修改。

保证各命令合法:

  1. add 保证操作前没有name文件。
  2. lnk 保证操作前没有name1文件,保证操作前有name2文件。
  3. edt 保证操作前有name文件。
  4. ren 保证操作前有name1文件,保证操作前没有name2文件。
  5. new 保证操作前没有ver版本。
  6. ldv 保证操作前有ver版本。
  7. qav 保证操作前有ver版本。
  8. 保证一个测试点至少有一行输出,但可能有不需要输出的询问。

版本数,各版本文件总数,修改次数 ,输出总行数不超过

通告标题

通告内容

已知晓