题解 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
求过和赞
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现