Uva - 12504 - Updating a Dictionary
全是字符串相关处理,截取长度等相关操作的练习
AC代码:
#include <iostream> #include <cstdio> #include <cstdlib> #include <cctype> #include <cstring> #include <string> #include <sstream> #include <vector> #include <set> #include <map> #include <algorithm> #include <stack> #include <queue> using namespace std; int main() { ios::sync_with_stdio(false); int T; cin >> T; while (T--) { map<string, string> ma; string dictOld, dictNew; string ad[102], del[102], cha[102]; // 分别存储增加的,减少的,变化的关键字 cin >> dictOld >> dictNew; int addCount = 0; int deleteCount = 0; int changeCount = 0; int a = 0; while (dictOld.find(',', a + 1) < dictOld.size()) { // 这里截取方法比较重要 string s(dictOld, a + 1, dictOld.find(',', a + 1) - a - 1); string kay(s, 0, s.find(':', 0)); string value(s, s.find(':', 0) + 1, s.size() - s.find(':', 0)); ma.insert(pair<string, string>(kay, value)); a = dictOld.find(',', a + 1); } string s(dictOld, a + 1, dictOld.find('}', a + 1) - a - 1); string kay(s, 0, s.find(':', 0)); string value(s, s.find(':', 0) + 1, s.size() - s.find(':', 0)); if (kay.size()) { ma.insert(pair<string, string>(kay, value)); } a = 0; while (dictNew.find(',', a + 1) < dictNew.size()) { string s(dictNew, a + 1, dictNew.find(',', a + 1) - a - 1); string key(s, 0, s.find(':', 0)); string value(s, s.find(':', 0) + 1, s.size() - s.find(':', 0)); if (ma.find(key) == ma.end()) { ad[addCount++] = key; } else { string temp = ma.find(key)->second; if (temp != value) { cha[changeCount++] = key; } ma.erase(key); } a = dictNew.find(',', a + 1); } string s1(dictNew, a + 1, dictNew.find('}', a + 1) - a - 1); string key1(s1, 0, s1.find(':', 0)); string value1(s1, s1.find(':', 0) + 1, s1.size() - s1.find(':', 0)); if (key1.size()) { if (ma.find(key1) == ma.end()) { ad[addCount++] = key1; } else { string temp = ma.find(key1)->second; if (temp != value1) { cha[changeCount++] = key1; } ma.erase(key1); } } while (ma.begin() != ma.end()) { string temp = ma.begin()->first; del[deleteCount++] = temp; ma.erase(temp); } if (addCount == 0 && deleteCount == 0 && changeCount == 0) { cout << "No changes\n"; } else { if (addCount) { sort(ad, ad + addCount); cout << "+"; for (int i = 0; i < addCount; i++) { if (i) { cout << ","; } cout << ad[i]; } cout << endl; } if (deleteCount) { sort(del, del + deleteCount); cout << "-"; for (int i = 0; i < deleteCount; i++) { if (i) { cout << ","; } cout << del[i]; } cout << endl; } if (changeCount) { sort(cha, cha + changeCount); cout << "*"; for (int i = 0; i < changeCount; i++) { if (i) { cout << ","; } cout << cha[i]; } cout << endl; } } cout << endl; } return 0; }
Uva - 12504 - Updating a Dictionary的更多相关文章
- [ACM_模拟] UVA 12504 Updating a Dictionary [字符串处理 字典增加、减少、改变问题]
Updating a Dictionary In this problem, a dictionary is collection of key-value pairs, where keys ...
- 【UVA】12504 Updating a Dictionary(STL)
题目 题目 分析 第一次用stringstream,真TMD的好用 代码 #include <bits/stdc++.h> using namespace std; int ...
- Uva 511 Updating a Dictionary
大致题意:用{ key:value, key:value, key:value }的形式表示一个字典key表示建,在一个字典内没有重复,value则可能重复 题目输入两个字典,如{a:3,b:4,c: ...
- csuoj 1113: Updating a Dictionary
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1113 1113: Updating a Dictionary Time Limit: 1 Sec ...
- 湖南生第八届大学生程序设计大赛原题 C-Updating a Dictionary(UVA12504 - Updating a Dictionary)
UVA12504 - Updating a Dictionary 给出两个字符串,以相同的格式表示原字典和更新后的字典.要求找出新字典和旧字典的不同,以规定的格式输出. 算法操作: (1)处理旧字典, ...
- [刷题]算法竞赛入门经典(第2版) 5-11/UVa12504 - Updating a Dictionary
题意:对比新老字典的区别:内容多了.少了还是修改了. 代码:(Accepted,0.000s) //UVa12504 - Updating a Dictionary //#define _XieNao ...
- Problem C Updating a Dictionary
Problem C Updating a Dictionary In this problem, a dictionary is collection of key-value pairs, ...
- Updating a Dictionary UVA - 12504
In this problem, a dictionary is collection of key-value pairs, where keys are lower-case letters, a ...
- 【习题 5-11 UVA 12504 】Updating a Dictionary
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 不确定某个map里面是否有某个关键字的时候. 要用find来确定. 如果直接用访问下标的形式去做的话. 会强行给他加一个那个关键字( ...
随机推荐
- SQL 收缩数据库日志的几种办法 (2005与2008 略有区别)
在SQL Server 2000/2005中可以快速压缩日志log文件,通过SQL, 方法一: ---DBTEST 为数据库名,顺序最好别乱.注意:要先截断再清空,最后收缩! backup log D ...
- vue中的eventBus
在vue2中,父子组件传递数据,父组件可以直接传递数据进子组件,而子组件通过调用父组件传递进来的方法,将自己的数据传递回去. 那兄弟组件之间,或者是兄弟组件的子组件之间如何传递呢? 当然vuex是一种 ...
- JNI 方法注册与签名+BufferedReader使用readLine问题
最近了解了关于JavaJNI接口的一些关于方法注册与签名相关的知识,在此进行一下总结. 使用JNI接口时,我们首先需要把Java方法声明为native: public native void f(); ...
- JSP运行过程 JSP脚本 静态动态包含 jsp指令 jsp内置对象jsp四大作用域 jsp动作元素 EL表达式 JSTL 设计模式 JSP开发模式 EL内置对象
Day38 JSP JSP的运行过程具体如下: (1)客户端发出请求,请求访问JSP文件. (2)JSP容器先将JSP文件转换成一个Java源文件(Java Servlet源程序),在转换过程中,如果 ...
- ubuntu批量更改文件权限
重装系统之后,把文件从windows分区拷到linux分区发现所有文件的权限全是777,在终端下看到所有文件的颜色都很刺眼,文件有很多,一个一个改不现实,所以写了一段python脚本批量更改文件权限. ...
- 蚂蚁代理免费代理ip爬取(端口图片显示+token检查)
分析 蚂蚁代理的列表页大致是这样的: 端口字段使用了图片显示,并且在图片上还有各种干扰线,保存一个图片到本地用画图打开观察一下: 仔细观察蓝色的线其实是在黑色的数字下面的,其它的干扰线也是,所以这幅图 ...
- LintCode题解之判断是否为平方数之和
简单粗暴 public class Solution { /* * @param : the given number * @return: whether whether there're two ...
- [self init]
在字典转模型中遇到了这样的代码: #import "HMAppInfo.h" @implementation HMAppInfo - (instancetype)initWithD ...
- Java内存泄漏分析系列之二:jstack生成的Thread Dump日志结构解析
原文地址:http://www.javatang.com 一个典型的thread dump文件主要由一下几个部分组成: 上图将JVM上的线程堆栈信息和线程信息做了详细的拆解. 第一部分:Full th ...
- Bootstrap3 表格-带边框的表格
添加 .table-bordered 类为表格和其中的每个单元格增加边框. <table class="table table-bordered"> ... </ ...