string[_view]

题目背景

C++ 的 string 类是一个功能强大的字符串类,然而由于其字符串算法和内存管理绑定的机制,所以在处理 C 风格字符串时效率低下。 为了解决这个问题,C++17 标准引入了 string\_view 类型,将内存管理和字符串算法分离,从而更好地适配了 C 风格字符串的处理。

题目描述

你需要模拟一个简单的 C++ 程序,该程序的每一行必然为如下两种形式之一: - `string <variable-name>(<initializer>);` - `string_view <variable-name>(<initializer>);` 其中 `variable-name` 为声明的变量名(保证之前未出现过,且长度不超过 $10$),`initializer` 为初始化该变量的内容,可以是: - 字符串字面量,即用双引号引起的字符串(形如 `"abc"`); - 之前出现过的变量名 `source`,此时应将 `source` 对应的字符串赋给 `variable-name`。 具体而言,将任意一个字符串 $s$ 赋给 string 类型会进行 $|s|$ 次字符拷贝,而赋给 string\_view 类型不会拷贝字符。其中 $|s|$ 为字符串 $s$ 的长度。 你需要计算出该程序中字符拷贝的总次数。

输入输出格式

输入格式


第一行输入一个整数 $L$,代表程序行数。 接下来 $L$ 行,输入一段代码。

输出格式


输出一个整数,代表字符拷贝总次数。

输入输出样例

输入样例 #1

6
string a("cxyakioi");
string_view b("cxyakapio");
string c(b);
string_view d(a);
string_view cxyakioi(c);
string cxyakapio(d);

输出样例 #1

25

说明

对于每组数据,保证代码长度均不超过 $10^4$(不包括换行符)。 保证字符串字面量(除去两侧引号)和变量名中只有拉丁字母,且给定的代码严格满足题目要求。 ### 子任务 | # | 特殊性质 | 分值 | | :--: | :----------------------------: | :--: | | 0 | 样例 | 0 | | 1 | 所有变量均为 string\_view 类型 | 10 | | 2 | 只使用字符串字面量初始化 | 20 | | 3 | - | 70 | --- 好消息:GCC 9.3.0 支持 string_view。 坏消息:NOI 不开 C++17。