/**/
/*
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;
}
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;
}