洛谷 P9680 string[_view] 题解

link

Sol

模拟题。

我们先定义一个结构体,来存储定义的字符串的名字,内容和长度。每一次输入分两个字符串,一个是类型,一个是名字和赋值内容。当遇到 string 时,如果是用字面量赋值,那么就计算引号里字符串的长度 \(l\)。然后把答案加上 \(l\),并把名字,内容,长度存储起来。如果是出现过的变量名赋值,那么在已经存储的字符串里查找,如果查找到了,那么把查找到的字符串的内容和长度赋值给新字符串并存储名字。再把答案加上长度。遇到 string_view 类型时只需去掉"把答案加上长度"这一步即可。

code

#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring> using namespace std; using ll = long long; const int kMaxN = 1e4 + 10, kInf = (((1 << 30) - 1) << 1) + 1; int l, ans = 0;
string a, b, tmp; struct node { // 结构体
string name, t; // 名字和内容
int len; // 长度
} s[kMaxN]; int main() {
// freopen(".in", "r", stdin);
// freopen(".out", "w", stdout);
cin >> l; // 输入 l
for (int i = 1; i <= l; ++ i) {
cin >> a >> b; // a 时类型,b 是名字和赋值内容
if (a == "string") { // 如果是 string 类型
if (b.find("\"") != b.npos) { // 如果是字面量
int fst = b.find("\""); // 查找第一个 "
char tmp = b[fst];
b[fst] = '!';
int scd = b.find("\""); // 查找第二个 "
b[fst] = tmp;
s[i].name = b.substr(0, fst - 1);
// 存储名字(第一个 " 之前的字符串)
s[i].t = b.substr(fst + 1, scd - fst - 1);
// 存储内容(第一个 " 和第二个 " 之间的字符串)
s[i].len = s[i].t.size();
// 存储长度
ans += s[i].len;
// 答案加上长度
} else {
int fst = b.find("("); // 查找 (
char tmp1 = b[fst];
b[fst] = '!';
int scd = b.find(")"); // 查找 )
b[fst] = tmp1;
tmp = b.substr(fst + 1, scd - fst - 1); // 已经存储的字符串的名字
for (int j = 1; j < i; ++ j) { // 查找
if (s[j].name == tmp) { // 如果是配对的
s[i].name = b.substr(0, fst); // 存储名字("(" 之前的字符串)
s[i].t = s[j].t;
// 把内容赋给新字符串
s[i].len = s[j].len;
// 把长度赋给新字符串
break;
}
}
ans += s[i].len;
}
} else {
/*只少了"把答案加上长度"这一步,不做注释*/
if (b.find("\"") != b.npos) {
int fst = b.find("\"");
char tmp = b[fst];
b[fst] = '!';
int scd = b.find("\"");
b[fst] = tmp;
s[i].name = b.substr(0, fst - 1);
s[i].t = b.substr(fst + 1, scd - fst - 1);
s[i].len = s[i].t.size();
} else {
int fst = b.find("(");
char tmp1 = b[fst];
b[fst] = '!';
int scd = b.find(")");
b[fst] = tmp1;
tmp = b.substr(fst + 1, scd - fst - 1);
for (int j = 1; j < i; ++ j) {
if (s[j].name == tmp) {
s[i].name = b.substr(0, fst);
s[i].t = s[j].t;
s[i].len = s[j].len;
break;
}
}
}
}
}
cout << ans << '\n';
return 0;
}

洛谷 P9680 string[_view] 题解的更多相关文章

  1. 洛谷P2832 行路难 分析+题解代码【玄学最短路】

    洛谷P2832 行路难 分析+题解代码[玄学最短路] 题目背景: 小X来到了山区,领略山林之乐.在他乐以忘忧之时,他突然发现,开学迫在眉睫 题目描述: 山区有n座山.山之间有m条羊肠小道,每条连接两座 ...

  2. 【洛谷P3960】列队题解

    [洛谷P3960]列队题解 题目链接 题意: Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n×m ...

  3. 洛谷P2312 解方程题解

    洛谷P2312 解方程题解 题目描述 已知多项式方程: \[a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\] 求这个方程在 \([1,m]\) 内的整数解(\(n\) 和 \(m\) ...

  4. 洛谷P1577 切绳子题解

    洛谷P1577 切绳子题解 题目描述 有N条绳子,它们的长度分别为Li.如果从它们中切割出K条长度相同的 绳子,这K条绳子每条最长能有多长?答案保留到小数点后2位(直接舍掉2为后的小数). 输入输出格 ...

  5. 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)

    洛谷P2507 [SCOI2008]配对 题解(dp+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1299251 链接题目地址:洛谷P2507 [S ...

  6. 洛谷 P1220 关路灯 题解

    Description 有 $n$ 盏路灯,每盏路灯有坐标(单位 $m$)和功率(单位 $J$).从第 $c$ 盏路灯开始,可以向左或向右关闭路灯.速度是 $1m/s$.求所有路灯的最少耗电.输入保证 ...

  7. 洛谷 P3695 CYaRon!语 题解 【模拟】【字符串】

    大模拟好啊! 万一远古计算机让我写个解释器还真是得爆零了呢. 题目背景 「千歌です」(我是千歌).「曜です」(我是曜).「ルビィです」(我是露比).「3人合わせて.We are CYaRon! よろし ...

  8. 洛谷 P1219 八皇后题解

    题目描述 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子. 上面的布局可以用序列2 4 6 1 3 ...

  9. 洛谷 P1020导弹拦截题解

    洛谷链接:https://www.luogu.org/problem/P1020 题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到 ...

  10. 【洛谷P3410】拍照题解(最大权闭合子图总结)

    题目描述 小B有n个下属,现小B要带着一些下属让别人拍照. 有m个人,每个人都愿意付给小B一定钱让n个人中的一些人进行合影.如果这一些人没带齐那么就不能拍照,小B也不会得到钱. 注意:带下属不是白带的 ...

随机推荐

  1. 强化学习框架:OpenRLHF源码解读,模型处理

    强化学习框架:OpenRLHF源码解读,模型处理 本文主要介绍 强化学习框架:OpenRLHF源码解读,模型处理 models框架设计 了解一下 OpenRLHF的模型框架设计范式: From:htt ...

  2. 记录一个仿Windows10加载动画

    1 <UserControl x:Class="Zhaoxi.Controls.Loading" 2 xmlns="http://schemas.microsoft ...

  3. Python3 GUI界面

    一.python gui(图形化)模块介绍: Tkinter :是python最简单的图形化模块,总共只有14种组建 Pyqt :是python最复杂也是使用最广泛的图形化 Wx :是python当中 ...

  4. 鸿蒙动画与交互设计:ArkUI 3D变换与手势事件详解

    大家好,我是 V 哥. 在鸿蒙 NEXT 开发中,ArkUI 提供了丰富的 3D 变换和手势事件功能,可用于创建生动且交互性强的用户界面.下面详细介绍 ArkUI 的 3D 变换和手势事件,并给出相应 ...

  5. C#网络编程(一)----DNS/TCP/UDP协议

    简介 计算机网络是指将分布在不同地理位置的计算机系统.设备通过通信线路和设备连接起来,遵循共同的通信协议,以实现 数据传输.资源共享.协同工作 的系统 .它是现代信息技术的核心基础设施,支撑着互联网. ...

  6. 【记录】LaTeX|Overleaf中ACM的LaTex模板的图片引用出现问号

    问题 单张图片引用,出现如下问题: 出问题的LaTeX部分: As is shown in Figure~\ref{img:result}: \begin{figure}[h] \centering ...

  7. 为什么重写equals一定也要重写hashCode方法?

    简要回答 这个是针对set和map这类使用hash值的对象来说的 只重写equals方法,不重写hashCode方法: 有这样一个场景有两个Person对象,可是如果没有重写hashCode方法只重写 ...

  8. 信息资源管理综合题之“S公司规划网络系统-内部用户需要使用的信息安全技术及其相应用途”

    一.案例:S公司是某网络设备制造商在国内的一级代理商,总部设在上海,在外高桥有一处大型的仓库,其二级经销商客户分布在全国几十座大中城市,并在北京.成都.西安和沈阳等地设立了办事处.总部实施了ERP系统 ...

  9. HarmonyOS NEXT开发实战教程-记账app

    今天分享的实战教程是一款记账app,最近分享的项目都是纯页面,没有服务端,没有数据接口,因为鸿蒙开发主要就是写页面,都是前端嘛.如果有友友想要完整的项目可以找幽蓝君定制,想学服务端开发的话幽蓝君也可以 ...

  10. vue3 基础-slot 插槽

    前几篇的内容都是父子组件通过属性传值或者事件传值这样的. 本篇来学习父组件在调用子组件时, 如果想要给子组件传递特定的内容 (dom) , 则可通过 slot 这个设计来轻易实现哦. 例如现在有这样一 ...