输入用字符串表示两个字典,输出合并后的字典。字典的键用一个字母或数字表示。注意:1和‘1’是不同的关键字!
输入格式:
在第一行中输入第一个字典字符串;
在第二行中输入第二个字典字符串。
输出格式:
在一行中输出合并的字典,输出按字典序。
"1" 的 ASCII 码为 49,大于 1,排序时 1 在前,"1" 在后。其它的字符同理。
输入样例1:
在这里给出一组输入。例如:
{1:3,2:5}
{1:5,3:7}
输出样例1:
在这里给出相应的输出。例如:
{1:8,2:5,3:7}
输入样例2:
在这里给出一组输入。例如:
{"1":3,1:4}
{"a":5,"1":6}
输出样例2:
在这里给出相应的输出。例如:
{1:4,"1":9,"a":5}
评测详情
| 测试点 | 提示 | 内存(KB) | 用时(ms) | 结果 | 得分 | |
| 0 | 308 | 2 |
答案正确 | 10 / 10 | ||
| 1 | 304 | 2 |
答案正确 | 10 / 10 | ||
| 2 | 396 | 3 |
答案正确 | 10 / 10 | ||
| 3 | 440 | 2 |
答案正确 | 10 / 10 | ||
| 4 | 432 | 2 |
答案正确 | 10 / 10 |
AC代码
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <unordered_map>
using namespace std;
typedef pair<string, int> PII;
vector<pair<int, string>> vis;
unordered_map<string, int> ma;
void solve(const string& s) {
for (int i = 0; i < s.size(); i++) {
if (s[i] == ':') {
string str;
int asc = 0;
int sum = 0;
if (i > 0 && s[i - 1] == '"') {
str += '"';
str += s[i - 2];
str += '"';
asc = static_cast<int>(s[i - 2]);
} else if (i > 0) {
int j = i;
while(s[j-1] != ',' && s[j-1] != '{')
{
str += s[j - 1];
j--;
}
reverse(str.begin(), str.end());
asc = stoi(str);
}
i++;
while (i < s.size() && s[i] != ',' && s[i] != '}') {
if (isdigit(s[i])) {
sum = sum * 10 + (s[i] - '0');
}
i++;
}
if(ma[str])
{
ma[str] += sum;
}
else
{
vis.push_back({asc, str});
ma[str] = sum;
}
}
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
string s1, s2;
getline(cin, s1);
getline(cin, s2);
solve(s1);
solve(s2);
sort(vis.begin(), vis.end());
cout << "{";
for (size_t i = 0; i < vis.size(); i++) {
string s = vis[i].second;
if (i > 0) cout << ",";
cout << s << ":" << ma[s];
}
cout << "}" << endl;
return 0;
}
795

被折叠的 条评论
为什么被折叠?



