资讯动态

河南萌新联赛2026第(五)场:信息工程大学 J题(模拟,映射(map))

发布时间:2026/10/22 2:30:37 来源:尧图企业网站定制
题目链接https://ac.nowcoder.com/acm/contest/139416/J题目大意给你一个用逗号分隔、格式为 物品名:数量 的字符串。同一个物品可能会出现多次。要求你合并同类项后输出两个信息1.共有多少种不同的物品。2.数量最多的物品名字如果数量并列最多取字典序最小的。题目思路可以知道字符串中的格式是物品:数量,,但是最后一个没有,,所以我们先加一个,以对齐格式然后我们使用映射map其中key存物品名val存物品数量对于每次操作可以使用字符串中给定的函数最后map的键值对数量就是物品数量由于map的key本身就是从小往大排序的所以直接输出第一个物品数量最多的即可时间复杂度O(NlogK),其中N表示字符串长度K表示不同物品的种类数代码如下#include bits/stdc.h using namespace std; #define endl \n // #define int long long // https://ac.nowcoder.com/acm/contest/139416/J // 河南萌新联赛2026第五场信息工程大学 J题(模拟,映射(map)) /* 题面大意给你一个用逗号分隔、格式为 物品名:数量 的字符串。同一个物品可能会出现多次。 要求你合并同类项后输出两个信息 共有多少种不同的物品。 数量最多的物品名字如果数量并列最多取字典序最小的。 题目思路可以知道字符串中的格式是物品:数量,,但是最后一个没有,, 所以我们先加一个,以对齐格式然后我们使用映射map其中key存物品名 val存物品数量对于每次操作可以使用字符串中给定的函数最后map的键值对 数量就是物品数量由于map的key本身就是从小往大排序的所以直接输出第一个 物品数量最多的即可 */ // 时间复杂度O(NlogK),其中N表示字符串长度K表示不同物品的种类数 void solve() { string s; cin s; s ,;//对齐字符串格式 mapstring, int mp;//以string为键int为值 int pos;//,的位置 int start 0;//初始查找位置 while (((pos s.find(,,start)) ! string::npos))//使用find函数找,找不到就退出 { string item s.substr(start, pos - start); // 从 start 开始截取长度为 pos - start start pos 1; int colon item.find(:);//找到: string name item.substr(0, colon);//截取物品名 int cnt stoi(item.substr(colon 1));//截取物品数量并转化为int类型 mp[name] cnt;//存入mp } string ans; int maxcnt 0; for (auto p : mp)//遍历mp { if (p.second maxcnt)//寻找最大物品数量 { maxcnt p.second; ans p.first; } } cout mp.size() endl;//mp的大小即物品种类数 cout ans endl;//物品最大数量的名字 } signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); int T 1; // cin T; while (T--) { solve(); } return 0; }

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑