1 条题解

  • 0
    @ 2025-8-24 21:41:36

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Diamiko
    此人已退役,不用留言了,看不见

    搬运于2025-08-24 21:41:36,当前版本为作者最后更新于2020-04-06 13:05:35,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    本题解使用std::map。

    其实非常简单,我们只要把所有高级词汇和它的含金量存在map里,输入文章的时候计算,直接输出结果就OK了。需要注意的就是输入的处理。

    正解应该是平衡树吧,我也不清楚,看tag知道的。但map内置红黑树,所以效率不会低很多。

    具体见代码。

    #include<iostream>
    #include<map>
    #include<string>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    typedef long long ll;
    ll n,p;
    map<string,ll>a;
    ll ans;
    int main()
    {
        scanf("%lld%lld",&n,&p);
        for(int i=1;i<=n;i++)
        {
            string word;
            ll value;
            cin>>word>>value;
            a[word]=value;
            //word即高级词汇,value即其含金量
        }
        string t="";
        char c;
        //t存储词汇
        //c是用于输入的临时变量
        while(scanf("%c",&c)!=EOF)
        {
            if(!(isdigit(c)||isalpha(c)))
            {
                //不是数字,也不是字母,那就是分隔符或者空格回车之类的
                ans=((ans%p)+(a[t]%p))%p;
                //那么就更新答案,把上一个词的含金量加上
                //如果上一个词不是高级词汇,那么在map里对应的含金量就是0
                //相当于没有变化
                //为了答案不溢出,随时取模
                t="";
                //还原,以便记录下一个词
            }
            else t+=c;
        }
        printf("%lld\n",ans);
        return 0;
    }
    
    • 1

    信息

    ID
    1840
    时间
    1000ms
    内存
    125MiB
    难度
    3
    标签
    递交数
    0
    已通过
    0
    上传者