题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1113

解题报告:输入两个字符串,第一个是原来的字典,第二个是新字典,字典中的元素的格式为一个关键字对应一个值,输入格式如下:

{a:3,b:4,c:10,f:6}
{a:3,c:5,d:10,ee:4}冒号前面的表示关键字,冒号后面的数字表示值,关键字由小写字母组成。现在让你判断,如果新的字典相对于原来的字典有新增的关键字以以下格式输出 :+key1,key2,....如果新的字典相对于原来的字典少了关键字以以下格式输出:-key1,key2....如果新的字典的关键字对于原来的字典的相同的关键字对应的值有变化以以下格式输出:*key1,key2...

主要有两个过程,首先把输入拆分成一个一个元素的形式存入map容器,然后就是比较的过程,这个简单了。要注意的是同一个关键字可能输入多次,所以要注意去重。然后还有据说这个题目的输入有问题,输入的时候有两个换行符,不过你只要都用scanf输入就行了,不用管。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<iostream>
 5 #include<cmath>
 6 #include<deque>
 7 #include<queue>
 8 #include<cstdlib>
 9 #include<string>
10 #include<map>
11 using namespace std;
12 const int maxn = 205;
13 map<string,string> old,New;
14
15 char str[2][maxn];
16 int changeto(map<string,string>& mp,char* str)
17 {
18     string a = "",b = "";
19     int len = strlen(str),f = 0;
20     for(int i = 0;i < len;++i)
21     {
22         if(str[i] == '{' || str[i] == ',' || str[i] == '}')
23         {
24             mp.insert(pair<string,string> (a,b));
25             a = "";
26             b = "";
27             continue;
28         }
29         if(str[i]  >= 'a' && str[i] <= 'z')
30         a += str[i];
31         else if(str[i] >= '0' && str[i] <= '9')
32         b += str[i];
33     }
34     return f;
35 }
36 int main()
37 {
38     int T,flag = 0;
39     scanf("%d",&T);
40     while(T--)
41     {
42         scanf("%s%s",str[0],str[1]);
43         int num1 = changeto(old,str[0]);
44         int num2 = changeto(New,str[1]);
45         int j,ff = 0,fff = 0;
46         for(map<string,string>::iterator iter = New.begin();iter != New.end();++iter)
47         {
48             if(old.insert(*iter).second == 1)
49             {
50                 printf(ff? ",%s":"+%s",iter->first.c_str());
51                 old.erase(iter->first);    // 插入成功的话一定要记得删除,不然会影响后面的查找
52                 ff = 1;
53             }
54         }
55         if(ff) puts("");
56         fff = max(ff,fff);
57         ff = 0;
58         for(map<string,string>::iterator iter = old.begin();iter != old.end();++iter)
59         {
60             if(New.insert(*iter).second == 1)
61             {
62                 printf(ff? ",%s":"-%s",iter->first.c_str());
63                 New.erase(iter->first);
64                 ff = 1;
65             }
66         }
67         if(ff) puts("");
68         fff = max(ff,fff);
69         ff = 0;
70         for(map<string,string>::iterator iter = New.begin();iter != New.end();++iter)
71         {
72             if(old.insert(*iter).second == 0 && old[iter->first] != New[iter->first])
73             {
74                 printf(ff? ",%s":"*%s",iter->first.c_str());
75                 ff = 1;
76             }
77         }
78         if(ff) puts("");
79         fff = max(ff,fff);
80         if(fff == 0) puts("No changes");
81         puts("");
82         old.clear();
83         New.clear();
84     }
85     return 0;
86 }

View Code

转载于:https://www.cnblogs.com/xiaxiaosheng/p/4009305.html

CSU 1113 Updating a Dictionary(map容器应用)相关推荐

  1. Map容器大小影响key的索引

    单元测试偶然发现的Map一个问题 Map<String,String> map1 = new HashMap<>();map1.put("aaa", &qu ...

  2. C++中map容器的说明和使用技巧

    C++中map容器提供一个键值对容器,map与multimap差别仅仅在于multiple允许一个键对应多个值. 1   头文件 #include <map> 2   定义 map< ...

  3. HDU 2094 产生冠军 (map容器)

    title: 产生冠军 杭电 2094 tags: [acm,stl] 题目链接 Problem Description 有一群人,打乒乓球比赛,两两捉对撕杀,每两个人之间最多打一场比赛. 球赛的规则 ...

  4. leetcode(3)——697. 数组的度(C++版本注释)(map容器),448. 找到所有数组中消失的数字(取余操作,C++中的auto类型)

    文章目录 前言 697 程序 思路 收获 map容器 448 程序 收获 取模操作的思考 auto 前言 大佬的程序,边刷边总结边学语言. 题目697 697 程序 class Solution {p ...

  5. c++ map 修改value_C++知识分享之STL容器:set 容器与 map 容器的简单应用

    set容器中一些函数,取自百度其他大佬已总结好的,如有侵权,请联系删除! set的各成员函数列表如下: c++ stl容器set成员函数:begin()--返回指向第一个元素的迭代器 c++ stl容 ...

  6. C++map容器遍历删除:cannot increment value-initialized map/set iterator

    今天写C++结课作业遇到一个遍历删除的bug: 原代码: for(it=imap.begin();it!=imap.end();it++) imap.erase(it) 运行后: 第一次循环末尾,it ...

  7. map容器中删除一个元素(value)

    一:问题描述 我们想要删除map容器中,一个key值对应的vlaue 二:上码 #include<iostream> #include<map> #include<vec ...

  8. map容器的使用 逆序遍历map容器当中的数据

    一:前言 这个逆序遍历是将map容器的迭代器进行了变化,reverse_iterator逆向遍历的迭代器 ,它需要 rbegin()和rend()方法指出反向遍历的 起始位置和终止位置. 二:上码演示 ...

  9. [NOIP2008 提高组] 笨小猴-map容器用来标记

    题目描述 笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼.但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大! 这种方法的具体描述如下:假设maxn是单词中出现次数最 ...

最新文章

  1. kafka中生产者是如何把消息投递到哪个分区的?消费者又是怎么选择分区的?...
  2. Struts2知识整理
  3. 出现了错误。详细消息: 3 uncommitted changes would be overwritten by merge
  4. 那些帮助你成为优秀前端工程师的讲座——《性能篇》
  5. 东北大学 计算机调剂,2018年东北大学信息科学与工程学院考研调剂信息
  6. Jquery之Bind方法参数传递与接收的三种方法
  7. 关于WinForms的跨显示器DPI自适应
  8. 高并发下防止库存超卖解决方案
  9. 记腾讯互娱网站布局(3)
  10. 查询字符串某个字符的个数
  11. 三角传输的在链路均衡项目中的灵活应用
  12. 【算法】排序_桶排序
  13. 华为笔记本电脑安装 Linux 操作系统之Manjaro(手把手教学)
  14. 3GP转换器 Pro 3.5
  15. Matlab求集合交集和并集
  16. 探究 LightHouse 工作流程
  17. 分支与循环语句(下)
  18. 微信小程序连接蓝牙ble教程(目录)
  19. cst是什么时间(Cst是什么检查)
  20. OSI模型、TCP/IP模型、数据封装与解封装-----网络通信原理

热门文章

  1. JCheckBox 默认选择_[注册表] 将Windows 10默认应用程序设置页面添加到桌面右键菜单中...
  2. mysql监控 hp_0066 使用PHP和MySQL实现学生分数信息管理
  3. java获取mysql数据定时执行_详解SpringBoot 创建定时任务(配合数据库动态执行)...
  4. python遍历目录压缩文件夹然后在发送邮件_python目录操作之python遍历文件夹后将结果存储为xml...
  5. php 获取对象中的元素个数组长度,php数组长度怎么获取
  6. python中国余数定理_Python实现的中国剩余定理算法示例
  7. 关闭打开Excel弹出要安装“Microsoft.VisualStudio.QualityTools.LoadTestExcelAddIn.vsto”加载项
  8. java 基本的数据类型_Java的基本数据类型介绍
  9. python网站设计开题报告_XX网站设计开题报告范文
  10. python初学者之网络爬虫_Python初学者之网络爬虫(二)