P9680 string[_view]
a1a2a3a4a5 · · 题解
P9680 string[_view]
题意
- 两个字符类型,一个字符类型花费次数,一个不花费,花费次数是字符串长度。
- 在“赋给
string_view类型不会拷贝字符。”中,赋给的意思就是等号右边的字符串类型是string_view的不会拷贝字符。
思路
- 首先是一堆麻烦的边角料,咱给他按模拟的思路去了。
- 可以发现如果是普通字符串类型,我们字符串内容没什么用,所以定两个
map一个存字符串长度,一个存字符串是不是string_view类型,如果赋字符串变量就赋字符串变量的长度。 - 然后如果要花费直接加长度。
代码
#include<bits/stdc++.h>
using namespace std;
int l,da;
string fw,xiaochou,ming,neirong;
map<string,int> len;
map<string,bool> lihai;
int main()
{
cin>>l;
for(int i=1;i<=l;i++)
{
cin>>fw>>xiaochou;//俩小丑,咱们用完就把他俩甩了!
bool f=0,mao=0;ming="";neirong="";
//mao冒号?ming名字,neirong内容。
for(int i=0;i<xiaochou.size();i++)
{
char x=xiaochou[i];//把小丑的钱给我家哥哥。
if(x=='('||x==')'||x==';') f=1;//f判断是不是到赋值部分了。
else if(x=='"') mao=1;//独立自主的。
else if(f==0) ming=ming+x;//变量名字。
else neirong=neirong+x;
}
if(mao)//有冒号?
{
len[ming]=neirong.size();
lihai[ming]=fw.size()>8?1:0;//你什么血统?
if(!lihai[ming]) da+=len[ming];//投胎不好直接制裁!
}
else//借助前辈的力量。
{
len[ming]=len[neirong];//直接啃老。
lihai[ming]=fw.size()>8?1:0;//记录血统!
if(!lihai[ming]) da+=len[neirong];//投胎不好继续制裁!
}
}
cout<<da;
return 0;
}