luogu#P9680. string[_view]

    ID: 13649 远端评测题 1000ms 512MiB 尝试: 0 已通过: 0 难度: 2 上传者: 标签>模拟字符串洛谷原创O2优化洛谷月赛

string[_view]

题目背景

C++ 的 string 类是一个功能强大的字符串类,然而由于其字符串算法和内存管理绑定的机制,所以在处理 C 风格字符串时效率低下。

为了解决这个问题,C++17 标准引入了 string_view 类型,将内存管理和字符串算法分离,从而更好地适配了 C 风格字符串的处理。

题目描述

你需要模拟一个简单的 C++ 程序,该程序的每一行必然为如下两种形式之一:

  • string <variable-name>(<initializer>);
  • string_view <variable-name>(<initializer>);

其中 variable-name 为声明的变量名(保证之前未出现过,且长度不超过 1010),initializer 为初始化该变量的内容,可以是:

  • 字符串字面量,即用双引号引起的字符串(形如 "abc");
  • 之前出现过的变量名 source,此时应将 source 对应的字符串赋给 variable-name

具体而言,将任意一个字符串 ss 赋给 string 类型会进行 s|s| 次字符拷贝,而赋给 string_view 类型不会拷贝字符。其中 s|s| 为字符串 ss 的长度。

你需要计算出该程序中字符拷贝的总次数。

输入格式

第一行输入一个整数 LL,代表程序行数。

接下来 LL 行,输入一段代码。

输出格式

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

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

提示

对于每组数据,保证代码长度均不超过 10410^4(不包括换行符)。

保证字符串字面量(除去两侧引号)和变量名中只有拉丁字母,且给定的代码严格满足题目要求。

子任务

# 特殊性质 分值
0 样例 0
1 所有变量均为 string_view 类型 10
2 只使用字符串字面量初始化 20
3 - 70

好消息:GCC 9.3.0 支持 string_view。

坏消息:NOI 不开 C++17。