3313. Git

单点时限: 2.0 sec

内存限制: 256 MB

Git 是现今最为流行的分布式版本控制软件,最初版本的 Git 是由 Linus 在几周时间内完成的,
用以进行 Linux 的版本管理,而后经过十余年的发展,以 GitHub 为首的代码托(交)管(友)网站已经程序员生活中重要的一部分。

受此其他,dlf准备开发一套全新的名为 GayHub 的代码托(交)管(友)网站。
然而网站内部账号的管理却难倒了dlf,为此,dlf决定让你帮助他进行网站的管理。

dlf定义了以下变量:

  • 用户账号:$user $userC $userS,由英文字母或数字构成
  • 代码仓库:$repo,由英文字母或数字构成

dlf定义网站运作需要的操作:

  1. 用户注册:$user register
  2. 用户创建代码仓库:$user create $repo
    表示用户$user创建了仓库$repo
  3. 用户复制仓库:$userC fork $userS $repo
    表示执行复制的用户userC复制了来源用户userS的一个代码库$repo
    若能够进行复制,$userC会新增一个名为$repo的代码仓库
  4. 查看当前用户列表:$user getUser
    需要按照注册的顺序给出所有用户的列表
  5. 用户查看代码仓库列表:$user getRepo
    需要按照代码仓库被复制或是创建的先后顺序给出$user拥有的所有代码仓库的列表

交互协议和注意事项:

  • 初始存在用户dlf且拥有一个代码仓库GayHub
  • 两个代码仓库名字的比较对大小写敏感
  • 所有非法操作无法执行,需要输出Sorry, guy.并放弃操作,
  • 对于前三种操作,执行成功后输出Ok, gay.,对于后两种操作,执行成功后输出对应的结果
  • 注册已有的用户是非法的,不存在的用户执行除注册以外的操作是非法的
  • 同一用户以创建或复制的方式拥有两个名字相同的代码仓库是非法的
  • 复制的来源用户不存在或来源用户没有对应的代码库是非法的
  • 只有dlf能够查看用户列表,其他用户查看用户列表是非法的
  • 对于后两种操作,若输出列表为空则输出Empty,若非空则每行输出一项

输入格式

有多组输入,组数不超过 $50$,每组输入的第一行为 $n$ 表示操作的数目

接下来 $n$ 行,每行都是一次操作,保证所有操作格式正确,请仔细阅读交互协议和注意事项

保证 $40\%$ 的数据中只含有第1种和第4种操作

保证 $n\leq 1000$

输出格式

请仔细阅读交互协议和注意事项,输出对应的结果

样例

Input
11
dlf register
dlf create GayHub
dlf create GitHub
cdm fork dlf GitHub
cdm register
cdm getRepo
cdm fork dlf GitHub
cdm fork dlf GirlHub
cdm getRepo
dlf getUser
cdm getUser
Output
Sorry, guy.
Sorry, guy.
Ok, gay.
Sorry, guy.
Ok, gay.
Empty
Ok, gay.
Sorry, guy.
GitHub
dlf
cdm
Sorry, guy.

15 人解决,26 人已尝试。

17 份提交通过,共有 83 份提交。

6.0 EMB 奖励。

创建: 6 年,8 月前.

修改: 6 年,7 月前.

最后提交: 3 年前.

来源: 2017.7.30 少年宫集训 NOIP模拟赛

题目标签