🐷大肚肚
CF-56C普及+/提高

通信

2.0s💾 256MB

📋 题目描述

以下语法表示了公司的上下属情况:

  • employeeemployee : namename . , namename : employee1employee_{1}. , employee2.employee_{2}. , ... , employeek.employee_{k}. ,...
  • namename : name of an employeename\ of\ an\ employee

例如: Alice:Bob.,Calif.,Daddy. 表明 AliceAlice 有三个下属分别叫 BobBobCalifCalifDaddDadd

整个体系中可能出现多个人有相同的名字 。有上下级关系的同名人会相互通信。定义 “ 不舒服度 ” 为有上下级关系的同名两人组的组数。

📥 输入格式

一个字符串,只可能包好大小写字母,英文模式的句号、逗号和冒号,长度不超过 10001000 ,保证单个人名长度不超过 1010 。每一个姓名结束处都要有一个句号,每一层结束也要有一个句号。例如 A:A..A:A.. 中,第一个句号是第二个姓名 AA 结束的标记,第二个句号是 :: 代表的层级结束的标记。

📤 输出格式

仅有一行,包含一个整数表示不舒服度。

📝 样例 1

输入
MIKE:MAX.,ARTEM:MIKE..,DMITRY:DMITRY.,DMITRY...
输出
3

📝 样例 2

输入
A:A..
输出
1

📝 样例 3

输入
A:C:C:C:C.....
输出
6

📚 来源

💡 题目讲解

1

理解题意

题目描述了一个公司的上下级关系,用特殊格式表示。

语法规则(用 "A:A.." 来讲):

逐字符解读:第一个 A 是上司名字,: 表示他有下属,第二个 A 是下属名字(也叫 A),第一个 . 结束下属 A,第二个 . 结束这一层。

上司 A 有一个下属,名字也叫 A。不舒服度 = 1

规则总结

  • 名字后跟 : → 此人有下属,压栈进入其下属列表
  • 名字后跟 . → 叶子(无下属),名字结束
  • , 分隔同级下属
  • 收尾的 . → 弹栈退出当前层级
1 / 5