当前位置: 代码迷 >> 综合 >> UVA 12504 Updating a Dictionary(算法竞赛入门经典,stl)
  详细解决方案

UVA 12504 Updating a Dictionary(算法竞赛入门经典,stl)

热度:68   发布时间:2023-12-13 19:09:14.0

算法竞赛入门经典,stl
本题要点:
1、处理每一条字符串的时候,使用 字符串流stringstream 来处理,先把原来的字符串
中的字符 ‘{’, ‘}’, ‘,’ 替换为 空格 ’ ', 然后就好处理了。
2、使用 map<string, string> 来记录每一条字符串中对应 的 key 和 value
3、寻找第二天字符串新 增加的, 删除的, 修改的字符串,各自用一个 set 来存,
寻找一个 map 中,是否存在字符串 str , 用find函数。

#include<bits/stdc++.h>
using namespace std;
const int MaxN = 110;
int T;
string a, b;void handle_str(string  s, map<string, string> &mp)
{
    int len = s.size();for(int i = 0; i < len; ++i){
    if (s[i] == '{' || s[i] == '}' || s[i] == ',' || s[i] == ':')s[i] = ' ';	}stringstream input(s);string ky, val;while(input >> ky >> val){
    mp[ky] = val;}
}void print_set(const set<string> &s, char ch)
{
    if(s.empty())return;printf("%c", ch);set<string>::iterator it = s.begin();printf("%s", it->c_str());++it;while(it != s.end()){
    printf(",%s", it->c_str());	++it;}printf("\n");
}void solve()
{
    map<string, string> mp1, mp2;handle_str(a, mp1);handle_str(b, mp2);set<string> s1, s2, s3;	//增加,删除, 修改 map<string, string>::iterator it = mp2.begin();while(it != mp2.end()){
    map<string, string>::iterator tmp = mp1.find(it->first);if(tmp != mp1.end()){
    if(it->second != tmp->second)	{
    s3.insert(it->first);}}else{
    s1.insert(it->first);}++it;}it = mp1.begin();while(it != mp1.end()){
    if(mp2.find(it->first) == mp2.end())	{
    s2.insert(it->first);}++it;}print_set(s1, '+');print_set(s2, '-');print_set(s3, '*');if(s1.size() == 0 && s2.size() == 0 && s3.size() == 0){
    printf("No changes\n");}printf("\n");
}int main()
{
    scanf("%d", &T);getchar();while(T--){
    cin >> a >> b;solve();}return 0;
}/* 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} *//* +d,ee -b,f *cNo changes-first */
  相关解决方案