感觉我又犯二了,各种if,else if,一会儿看看题解。
明天有个院的对抗赛,我总有一种我要坑的预感。。。既然明天比赛,今天争取早点睡吧。
#include<iostream>
#include<set>
#include<string>
#include<map>
#include<queue>
#include<vector>
#include<cctype>
#define OLD_DIC old_dic_val.top().dic
#define OLD_VAL old_dic_val.top().val
#define NEW_DIC new_dic_val.top().dic
#define NEW_VAL new_dic_val.top().val
using namespace std;
struct dic_val {
string dic, val;
};
struct cmp_dic {
bool operator () (const dic_val &dic1, const dic_val &dic2) const {
return dic1.dic > dic2.dic;
}
};
string old_dic, new_dic;
priority_queue<dic_val, vector<dic_val>, cmp_dic> old_dic_val, new_dic_val;
void get_old_dic(string old_dic_w) {
dic_val dic_w;
if(old_dic_w.size() == 2) return ;
for(int i = 0; old_dic_w[i] != '}'; i++) {
if(isdigit(old_dic_w[i]))
dic_w.val += old_dic_w[i];
if(isalpha(old_dic_w[i]))
dic_w.dic += old_dic_w[i];
if(old_dic[i] == ','|| old_dic[i + 1] == '}') {
old_dic_val.push(dic_w);
dic_w.val.clear();
dic_w.dic.clear();
}
}
}
void get_new_dic(string new_dic_w) {
dic_val dic_w;
if(new_dic_w.size() == 2) return ;
for(int i = 0; new_dic_w[i] != '}'; i++) {
if(isdigit(new_dic_w[i]))
dic_w.val += new_dic_w[i];
if(isalpha(new_dic_w[i]))
dic_w.dic += new_dic_w[i];
if(new_dic[i] == ','|| new_dic[i + 1] == '}') {
new_dic_val.push(dic_w);
dic_w.val.clear();
dic_w.dic.clear();
}
}
}
int print(set<string> Set, char ch) {
if(Set.empty())
return 0;
int cnt = 0;
for(set<string>::iterator it = Set.begin();
it != Set.end(); it++) {
cnt ? cout << "," : cout << ch;
cnt = 1;
cout << *it;
}
cout << endl;
return 1;
}
int main() {
int n, cases = 0;
cin >> n;
while(n--) {
int sign = 0;
set<string> add_list, del_list, change_list;
cin >> old_dic >> new_dic;
get_old_dic(old_dic);
get_new_dic(new_dic);
while(!old_dic_val.empty()||
!new_dic_val.empty()) {
if(!old_dic_val.empty()&&
!new_dic_val.empty()) {
if(OLD_DIC == NEW_DIC) {
if(OLD_VAL == NEW_VAL) {
old_dic_val.pop();
new_dic_val.pop();
} else {
change_list.insert(OLD_DIC);
old_dic_val.pop();
new_dic_val.pop();
}
} else if(OLD_DIC < NEW_DIC) {
del_list.insert(OLD_DIC);
old_dic_val.pop();
} else {
add_list.insert(NEW_DIC);
new_dic_val.pop();
}
} else if(old_dic_val.empty()&&
!new_dic_val.empty()) {
add_list.insert(NEW_DIC);
new_dic_val.pop();
} else if(!old_dic_val.empty()&&
new_dic_val.empty()) {
del_list.insert(OLD_DIC);
old_dic_val.pop();
}
}
sign += print(add_list, '+');
sign += print(del_list, '-');
sign += print(change_list, '*');
if(!sign) cout << "No changes" << endl;
cout << endl;
}
return 0;
}