主页
搜索
最近更新
数据统计
申请密钥
批量保存
开发版网站(新前端)
系统公告
1
/
1
请查看完所有公告
P13849 题解
最后更新于 2025-08-27 21:11:18
作者
xrz114514
分类
题解
题解
P13849
复制 Markdown
查看原文
转到新前端
删除文章
更新内容
# P13849 题解 哇!这题能写题解,赶紧交一发。(好像写的很繁琐) ## 题面简述 给你先后两张值班表,问每个人的值班时间的变动。 ## 思路 发现字符串不太好处理,但我们有 `map` 啊。所以可以用 `map` 存储一个人在第一个表中的值班时间,和在第二个表的值班时间。不过有一个特别坑的点是,有可能一个人只在一张表出现,所以还要记录所有出现过的人名。接下来的事就简单了,我们按字典序遍历一遍所有出现过的人名,看他有没有变动就行了,具体请见代码。 ## 代码 ```cpp #include <bits/stdc++.h> using namespace std; int x, y; string z; map<string, int> mp1, mp2; //记录两张表中各个人的工作时间。 set<string> st; //这里用set来进行去重+排序。 int to_int(const string &s){ int res = 0; for(int i = 0; i < (int)s.size(); ++i){ res = res * 10 + s[i] - '0'; } return res; } int main(){ ios::sync_with_stdio(0), cin.tie(0); while(cin >> z){ //这题输入格式很烦,我这里用了一个好像很繁琐的方法。 if(z == "------"){ break; } x = to_int(z); cin >> z; y = to_int(z); cin >> z; mp1[z] += (y - x); st.insert(z); } while(cin >> z){ if(z == "======"){ break; } x = to_int(z); cin >> z; y = to_int(z); cin >> z; mp2[z] += (y - x); st.insert(z); } int flag = 0; for(auto it : st){ if(mp1[it] != mp2[it]){ cout << it << ' ' << (mp1[it] < mp2[it] ? '+' : '-') << abs(mp1[it] - mp2[it]) << '\n'; //这里用了三目表达式,感兴趣的可以自学一下。 flag = 1; } } if(!flag){ cout << "No differences found."; } return 0; } ```
正在渲染内容...
点赞
0
收藏
0