http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1113

1113: Updating a Dictionary

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 491  Solved: 121
[Submit][Status][Web Board]

Description

In this problem, a dictionary is collection of key-value pairs, where keys are lower-case letters, and values are non-negative integers. Given an old dictionary and a new dictionary, find out what were changed.
Each dictionary is formatting as follows:
{key:value,key:value,...,key:value}
Each key is a string of lower-case letters, and each value is a non-negative integer without leading zeros or prefix '+'. (i.e. -4, 03 and +77 are illegal). Each key will appear at most once, but keys can appear in any order.

Input

The first line contains the number of test cases T (T<=1000). Each test case contains two lines. The first line contains the old dictionary, and the second line contains the new dictionary. Each line will contain at most 100 characters and will not contain any whitespace characters. Both dictionaries could be empty.
WARNING: there are no restrictions on the lengths of each key and value in the dictionary. That means keys could be really long and values could be really large.

Output

For each test case, print the changes, formatted as follows:
·First, if there are any new keys, print '+' and then the new keys in increasing order (lexicographically), separated by commas.
·Second, if there are any removed keys, print '-' and then the removed keys in increasing order (lexicographically), separated by commas.
·Last, if there are any keys with changed value, print '*' and then these keys in increasing order (lexicographically), separated by commas.
If the two dictionaries are identical, print 'No changes' (without quotes) instead.
Print a blank line after each test case.

Sample Input

3
{a:3,b:4,c:10,f:6}
{a:3,c:5,d:10,ee:4}
{x:1,xyz:123456789123456789123456789}
{xyz:123456789123456789123456789,x:1}
{first:1,second:2,third:3}
{third:3,second:2}

Sample Output

+d,ee
-b,f
*c No changes -first

HINT

Source

湖南省第八届大学生计算机程序设计竞赛

分析:

STL容器的使用。

AC代码:

 #include<cstring>
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<string>
#include <cctype>
#include<map>
using namespace std;
char s1[];
char s2[];
char s3[];
char s4[];
bool cmp(string ss,string sss)
{
return ss<sss;
}
string st,ed;
int main()
{
int T,t1,t2;
scanf("%d",&T);
gets(s1);
while(T--)
{ map<string,string>ss1;
map<string,string>ss2;
map<string,string>::iterator it;
string ss[];
string plu[],dir[],key[];
int k1 = ,k2 =,k3 =,k4=;
ss1.clear();
ss2.clear();
for(int i=;i<;i++)
{
ss[i].clear();
plu[i].clear();
dir[i].clear();
key[i].clear();
}
gets(s1);
gets(s2);
st = ed = "";
int len1 = strlen(s1);
int len2 = strlen(s2);
for(int i=;i<len1;i++)
{
if(isdigit(s1[i]))
ed = ed+s1[i];
else if(isalpha(s1[i]))
st = st+s1[i];
else if(s1[i] == ',')
{
ss1[st] =ed;
ss[k4++] = st;
st = ed = "";
}
else if(s1[i] == '}')
{
if(st!="")
{
ss[k4++] = st;
ss1[st] =ed;
}
st = ed = "";
}
}
for(int i=;i<len2;i++)
{
if(isdigit(s2[i]))
ed =ed+s2[i];
else if(isalpha(s2[i]))
st = st+s2[i];
else if(s2[i] == ',')
{
it = ss1.find(st);
if(it!=ss1.end())//如果找到
{
if(ss1[st] != ed)//增加的
key[k3++] = st;
}
else
{
plu[k1++] = st;
}
ss2[st] =ed;
st = ed = "";
}
else if(s2[i] == '}')
{
if(st!="")
{
it = ss1.find(st);
if(it!=ss1.end())//如果找到
{
if(ss1[st] != ed)//增加的
key[k3++] = st;
}
else
{
plu[k1++] = st;
}
ss2[st] =ed;
}
st = ed = "";
}
}
for(int i=;i<k4;i++)
{
it = ss2.find(ss[i]);
if(it == ss2.end())//如果没有找到
{
dir[k2++] = ss[i];
}
}
if(k1+k2+k3 == )
printf("No changes\n");
else
{
sort(plu,plu+k1,cmp);
for(int i=;i<k1;i++)
{
if(i==) printf("+%s",plu[i].c_str());
else printf(",%s",plu[i].c_str());
}
if(k1>) printf("\n"); sort(dir,dir+k2,cmp);
for(int i=;i<k2;i++)
{
if(i==) printf("-%s",dir[i].c_str());
else printf(",%s",dir[i].c_str());
}
if(k2>) printf("\n"); sort(key,key+k3,cmp);
for(int i=;i<k3;i++)
{
if(i==) printf("*%s",key[i].c_str());
else printf(",%s",key[i].c_str());
}
if(k3>) printf("\n"); }
printf("\n");
}
return ;
}

csuoj 1113: Updating a Dictionary的更多相关文章

  1. CSU 1113 Updating a Dictionary(map容器应用)

    题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1113 解题报告:输入两个字符串,第一个是原来的字典,第二个是新字典,字典中的元素的格式为 ...

  2. CSU 1113 Updating a Dictionary

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

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

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

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

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

  5. [ACM_模拟] UVA 12504 Updating a Dictionary [字符串处理 字典增加、减少、改变问题]

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

  6. Problem C Updating a Dictionary

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

  7. Updating a Dictionary UVA - 12504

    In this problem, a dictionary is collection of key-value pairs, where keys are lower-case letters, a ...

  8. Uva 511 Updating a Dictionary

    大致题意:用{ key:value, key:value, key:value }的形式表示一个字典key表示建,在一个字典内没有重复,value则可能重复 题目输入两个字典,如{a:3,b:4,c: ...

  9. Uva - 12504 - Updating a Dictionary

    全是字符串相关处理,截取长度等相关操作的练习 AC代码: #include <iostream> #include <cstdio> #include <cstdlib& ...

随机推荐

  1. Java笔试面试题二(常考问答)转

    1.说出ArrayList,Vector, LinkedList的存储性能和特性 ArrayList 和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允 ...

  2. vimtutor

    ================================================================================ 欢 迎 阅 读 < V I M ...

  3. Linq&Lumbda (2)

    "Lambda表达式"是一个匿名函数,它可以包含表达式和语句,并且可用于创建委托或表达式树类型. Lambda 运算符: => 该运算符读为"goes to&quo ...

  4. C++线程池的实现(二)

    参考文章:http://blog.csdn.net/huyiyang2010/archive/2010/08/10/5801597.aspx // CThread.h #ifndef __MY_THR ...

  5. 如何写出无法维护的代码(JAVA版)

    程序命名(针对那些不能混淆的代码) 容易输入的名字.比如:Fred,asdf 单字母的变量名.比如:a,b,c, x,y,z,或者干脆上中文比如(阿隆索肯德基) 有创意地拼写错误.比如:SetPint ...

  6. .SQL Server中 image类型数据的比较

    原文:.SQL Server中 image类型数据的比较 在SQL Server中如果你对text.ntext或者image数据类型的数据进行比较.将会提示:不能比较或排序 text.ntext 和 ...

  7. Weak Pair---hud5877大连网选(线段树优化+dfs)

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5877  题意:给你一颗树,有n个节点,每个节点都有一个权值v[i]:现在求有多少对(u,v ...

  8. 【原创】storyboard启动应用程序的大致流程

    storyboard启动应用程序的大致流程 [原创] 转载请注明出处:http://i.cnblogs.com/EditPosts.aspx?postid=5395023 1. 用户点击APP图标—— ...

  9. WebApi 找到了与该请求匹配的多个操作

    在同一个命名空间内,报错 错误的路由代码: namespace CRM4S { public static class WebApiConfig { public static void Regist ...

  10. MongoDB 正则表达式

    示例 MongoDB 使用 $regex 操作符来设置匹配字符串的正则表达式. > db.col.find() { "_id" : ObjectId("56c6bb ...