题解 P2366 【yyy2015c01的IDE之Watches】

这个题目处理不难,但是这个读入真是坑爹啊!

说说我的经历:

代码没问题,scanf提交,MLE。下载数据,什么玩意1.20s,1ms都不用就出结果了,这……

cin提交,WA3个点,\n出的乱子

cin.get以及getchar提交,MLE……

终于,AC喽:

#include <iostream>
#include <cstring>
#include <cstdio>
#include <map>
using namespace std;

map <string, int> mp;

char ch;

int value = 0;

string x = "", f = "";

int main()
{
    int n;
    cin >> n;
    for(int i = 1; i <= n; i++)
    {
        x = "";
        value = 0;
        f = "";
        while(cin >> ch && ch != '=')
        {
            x += ch;
        }
        while(cin >> ch)//这里坑人啊!!!
        {
            if(ch != '+' && ch != ';')
            {
                f += ch;
            }
            else
            {
            	//string转int,stoi函数可以,但是嘛……调用函数费时间哦
                if(f[0] >= '0' && f[0] <= '9')
                {
                    int q = 0, len = f.length() - 1;
                    for(int i = 0; i <= len; i++)
                    {
                        q = (q << 1) + (q << 3) + (f[i] ^ 48);
                    }
                    value += q;
                }
                else
                {
                    value += mp[f];
                }
                f = "";
            }
            if(ch == ';')//这里不加会获得开心的25分哦
            {   
                break;
            }
        }
        mp[x] = value;
    }
    for(map <string, int>::iterator it = mp.begin(); it != mp.end(); ++it)
    {
        if(it -> second != 0)
        {
            cout << it -> first << " " << it -> second << endl;
        }
    }
    return 0;
}

那说下思路:

先用while读前面的,一直读到=就停止(那什么黑名单字符集貌似有问题),然后继续while读值,如果说不是+或者不是末尾的;就加起来,如果是就判断是变量还是数字!是数字string转int,不然就加这个变量的值

map大法好!

9ms

求过和赞

posted @   HappyBobb  阅读(8)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示