/**//* Name: 487-3279 - PKU 1002 Author: Mars Description: 本来用STL的MAP写的,超了N次时。。只得自己写了个二分查找树 Result: 2265308 bestzsx 1002 Accepted 2512K 998MS C++ 1753B 2007-06-12 23:50:54 */#include <iostream>using namespace std;int flag;class tNode ...{ public: tNode(); tNode(int value); int val; int counts; tNode * lch, * rch;};tNode::tNode() ...{ val = 0; counts = 0; lch = rch = NULL;}tNode::tNode(int value) ...{ val = value; counts = 1; lch = rch = NULL;}class BSTree ...{ public: BSTree(); tNode * insert(tNode *); void mfs(tNode *); tNode * root;};BSTree::BSTree() ...{ root = NULL;}tNode * BSTree::insert(tNode * z) ...{ tNode * y = NULL; tNode * x = root; while (x!=NULL) ...{ y = x; if (z->val == x->val) ...{ ++x->counts; break; } else if (z->val < x->val) ...{ x = x->lch; } else ...{ x = x->rch; } } if (NULL==x) ...{ if (NULL==y) root = z; else ...{ if (z->val < y->val) y->lch = z; else y->rch = z; } } return z;}void BSTree::mfs(tNode * tn) ...{ if (NULL==tn) return; mfs(tn->lch); if (tn->counts>1) ...{ if (!flag) flag = 1; cout.width(3); cout<<tn->val/10000; cout<<"-"; cout.width(4); cout<<tn->val%10000; cout<<" "<<tn->counts<<endl; } mfs(tn->rch);}int m1002() ...{ int i,N,val; char c; BSTree * bst = new BSTree(); flag = 0; cin>>N; c = cin.get(); // remove ' ' for (i=0;i<N;++i) ...{ // input val = 0; while ((c=cin.get())!=' ') ...{ if (c>='0' && c<='9') val=val*10+c-'0'; else if (c>='A' && c<'Q') val=val*10+(c-'A')/3+2; else if (c>'Q' && c<'Z') val=val*10+(c-'Q')/3+7; } bst->insert(new tNode(val)); // solve } cout.fill('0'); bst->mfs(bst->root); if (!flag) cout<<"No duplicates. "; delete bst; return 0;}