题目链接: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输入就行了,不用管。
 #include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<deque>
#include<queue>
#include<cstdlib>
#include<string>
#include<map>
using namespace std;
const int maxn = ;
map<string,string> old,New; char str[][maxn];
int changeto(map<string,string>& mp,char* str)
{
string a = "",b = "";
int len = strlen(str),f = ;
for(int i = ;i < len;++i)
{
if(str[i] == '{' || str[i] == ',' || str[i] == '}')
{
mp.insert(pair<string,string> (a,b));
a = "";
b = "";
continue;
}
if(str[i] >= 'a' && str[i] <= 'z')
a += str[i];
else if(str[i] >= '' && str[i] <= '')
b += str[i];
}
return f;
}
int main()
{
int T,flag = ;
scanf("%d",&T);
while(T--)
{
scanf("%s%s",str[],str[]);
int num1 = changeto(old,str[]);
int num2 = changeto(New,str[]);
int j,ff = ,fff = ;
for(map<string,string>::iterator iter = New.begin();iter != New.end();++iter)
{
if(old.insert(*iter).second == )
{
printf(ff? ",%s":"+%s",iter->first.c_str());
old.erase(iter->first); // 插入成功的话一定要记得删除,不然会影响后面的查找
ff = ;
}
}
if(ff) puts("");
fff = max(ff,fff);
ff = ;
for(map<string,string>::iterator iter = old.begin();iter != old.end();++iter)
{
if(New.insert(*iter).second == )
{
printf(ff? ",%s":"-%s",iter->first.c_str());
New.erase(iter->first);
ff = ;
}
}
if(ff) puts("");
fff = max(ff,fff);
ff = ;
for(map<string,string>::iterator iter = New.begin();iter != New.end();++iter)
{
if(old.insert(*iter).second == && old[iter->first] != New[iter->first])
{
printf(ff? ",%s":"*%s",iter->first.c_str());
ff = ;
}
}
if(ff) puts("");
fff = max(ff,fff);
if(fff == ) puts("No changes");
puts("");
old.clear();
New.clear();
}
return ;
}

CSU 1113 Updating a Dictionary(map容器应用)的更多相关文章

  1. CSU 1113 Updating a Dictionary

    传送门 Time Limit: 1000MS   Memory Limit: 131072KB   64bit IO Format: %lld & %llu Description In th ...

  2. csuoj 1113: Updating a Dictionary

    http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1113 1113: Updating a Dictionary Time Limit: 1 Sec  ...

  3. HDU 1113 Word Amalgamation (map 容器 + string容器)

    http://acm.hdu.edu.cn/showproblem.php?pid=1113 Problem Description In millions of newspapers across ...

  4. 湖南生第八届大学生程序设计大赛原题 C-Updating a Dictionary(UVA12504 - Updating a Dictionary)

    UVA12504 - Updating a Dictionary 给出两个字符串,以相同的格式表示原字典和更新后的字典.要求找出新字典和旧字典的不同,以规定的格式输出. 算法操作: (1)处理旧字典, ...

  5. [刷题]算法竞赛入门经典(第2版) 5-11/UVa12504 - Updating a Dictionary

    题意:对比新老字典的区别:内容多了.少了还是修改了. 代码:(Accepted,0.000s) //UVa12504 - Updating a Dictionary //#define _XieNao ...

  6. Problem C Updating a Dictionary

    Problem C     Updating a Dictionary In this problem, a dictionary is collection of key-value pairs, ...

  7. map 容器的使用

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

  8. 一种map容器遍历的方法

    遍历算法是一种很常见而且非常重要的算法,我们用map容器的时候可能用的比较多的是查找,我今天才第一次要用到遍历.下面举个例子就知道了. map<string,string> mp; str ...

  9. map容器

    map容器一般用于对字符串进行编号,主要用于建图方面,例如把城市名按数字进行编号 #include"stdio.h" #include"string.h" #i ...

随机推荐

  1. 使用chrome查看网页上效果的实现方式

    使用chrome查看网页上效果的实现方式 chrome是一个极为强大的工具,很多时候,我们不知道一个效果怎么实现的,我们完全可以找到响应的网页,然后找到其html文件,和js文件,查看源码,获得其实现 ...

  2. Jquery 基本知识(二)

    一.数据类型 5种基本数据类型:Null/Undefined/String/Boolean/Number 1种复杂数据类型:Object 二.数据类型检测 1.typeof 2.instanceof/ ...

  3. Centos7安装Oracle12c

    环境: CentOS7@VMware12,分配资源:CPU:2颗,内存:4GB,硬盘空间:30GB Oracle12C企业版64位 过程纪要: root身份安装依赖包: compat-libstdc+ ...

  4. WinForm------DockManager控件的使用方法(里面包含DockPanel控件)

    1.在"引用"中添加DevExpress.XtraBars和DexExpress.XtraNavBar程序集 2.往工具栏拖出DockManager控件,点击右上角的小三角,再点击 ...

  5. JavaScript 日历

    效果图: <html> <head> <script language="javascript"> /*@ 解题思路: .计算本月有多少天(先要 ...

  6. ecshop 活动-》红包

    按商品发放:可以给指定某个商品发红包(购买付款,卖家发货后,会自动给买家发送红包:不是买家在付款的时候就自动可以减少红包金额) 按订单金额发放:订单满xx后(卖家发货后,会自动给买家发放红包)

  7. js随机生成N位数

    function RondomPass(number){ var arr = new Array; "); ;i<number;i++){ ); arr[i] =arr1[n] ; / ...

  8. C# Monitoring-network

    http://www.codeproject.com/Articles/6259/Monitoring-network-speed

  9. Oracle的DBMS_OUTPUT.PUT_LINE用法及脚本批处理方法

    打印至控制台(无显示): BEGIN DBMS_OUTPUT.PUT_LINE('Hey look, ma!'); END; / 打印至控制台(有显示): SET SERVEROUTPUT ON BE ...

  10. _ATTRIBUTE__ 你知多少?

    from:http://www.cnblogs.com/astwish/p/3460618.html __ATTRIBUTE__ 你知多少? GNU C 的一大特色就是__attribute__ 机制 ...