benny5609的专栏

人生,到世上走一遭,只不过是单纯的体验与学习认识,当我们在临死的时候,可以光荣地对自己说:"我已领略过"便不枉此生。...

487-3279 - PKU 1002

/*
  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;
}
 
 
阅读更多
个人分类: Algorithm
上一篇pku_Exponentiation_1001
下一篇PKU题解
想对作者说点什么? 我来说一句

pku acm 1002 487-3279代码

2008年03月26日 4KB 下载

POJ 1002 487-3279 测试数据 完整

2016年08月13日 5.26MB 下载

没有更多推荐了,返回首页

关闭
关闭