Morass

12504 - Updating a Dictionary

Mar 17th, 2016
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.75 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define PB push_back
  4. #define ZERO (1e-10)
  5. #define INF (1<<29)
  6. #define CL(A,I) (memset(A,I,sizeof(A)))
  7. #define DEB printf("DEB!\n");
  8. #define D(X) cout<<"  "<<#X": "<<X<<endl;
  9. #define EQ(A,B) (A+ZERO>B&&A-ZERO<B)
  10. typedef long long ll;
  11. typedef long double ld;
  12. typedef pair<ll,ll> pll;
  13. typedef vector<int> vi;
  14. typedef pair<int,int> ii;
  15. typedef vector<ii> vii;
  16. #define IN(n) int n;scanf("%d",&n);
  17. #define FOR(i, m, n) for (int i(m); i < n; i++)
  18. #define REP(i, n) FOR(i, 0, n)
  19. #define F(n) REP(i, n)
  20. #define FF(n) REP(j, n)
  21. #define FT(m, n) FOR(k, m, n)
  22. #define aa first
  23. #define bb second
  24. void ga(int N,int *A){F(N)scanf("%d",A+i);}
  25. string s,r;
  26. map<string,string> A,B;
  27. set<string> a,b,c;
  28. int T;
  29. void spt(string&s,map<string,string>&A){
  30.     A.clear();
  31.     istringstream ss(s);
  32.     while(getline(ss,s,','))
  33.         A[s.substr(0,s.find(':'))]=s.substr(s.find(':'));
  34. }
  35. void mge(){
  36.     a.clear(),b.clear(),c.clear();
  37.     auto I(A.begin()),J(B.begin());
  38.     while(I!=A.end()&&J!=B.end()){
  39.         if(I->aa==J->aa){
  40.             if(I->bb!=J->bb)c.insert(I->aa);
  41.             ++I,++J;
  42.         }else if(I->aa<J->aa)a.insert(I->aa),++I;
  43.         else b.insert(J->aa),++J;
  44.     }
  45.     while(I!=A.end())a.insert(I->aa),++I;
  46.     while(J!=B.end())b.insert(J->aa),++J;
  47. }
  48. void pt(set<string>&H,char c){
  49.     int X(0);
  50.     for(auto&h:H)X=printf("%c%s",X?',':c,h.c_str());
  51.     if(!H.empty())putchar_unlocked(10),T=0;
  52. }
  53. int main(void){
  54.     IN(tt)F(tt){
  55.         cin>>s>>r,T=1;
  56.         s=s.substr(1),s.pop_back();
  57.         r=r.substr(1),r.pop_back();
  58.         spt(s,A),spt(r,B);
  59.         mge();
  60.         pt(b,'+'),pt(a,'-'),pt(c,42);
  61.         if(T)printf("No changes\n");
  62.         putchar_unlocked(10);
  63.     }
  64.     return 0;
  65. }
Advertisement
Add Comment
Please, Sign In to add comment