1 条题解

  • 0
    @ 2025-8-24 22:50:41

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar a1a2a3a4a5
    蒟蒻可骂,私信互关,互关者备故事来

    搬运于2025-08-24 22:50:41,当前版本为作者最后更新于2023-10-07 20:05:49,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    P9680 string[_view]

    题意

    1. 两个字符类型,一个字符类型花费次数,一个不花费,花费次数是字符串长度。
    2. 在“赋给 string_view 类型不会拷贝字符。”中,赋给的意思就是等号右边的字符串类型是 string_view 的不会拷贝字符。

    思路

    1. 首先是一堆麻烦的边角料,咱给他按模拟的思路去了。
    2. 可以发现如果是普通字符串类型,我们字符串内容没什么用,所以定两个 map 一个存字符串长度,一个存字符串是不是 string_view 类型,如果赋字符串变量就赋字符串变量的长度。
    3. 然后如果要花费直接加长度。

    代码

    #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;
    }
    
    • 1

    信息

    ID
    8354
    时间
    1000ms
    内存
    512MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者