POJ2418 Hardwood Species
2012-09-15 10:18
183 查看
原题传送:http://poj.org/problem?id=2418
用的是STL神器,map + priority_queue。(C++提交和G++提交相差6s !)
View Code
这题更好的一个做法是用排序二叉树,根据排序二叉树的性质:
若他的左子树不空,则左子树上所有的结点均小于它的根结点的值。
若他的右子树不空,则右子树上所有的结点均大于它的根结点的值。
他的左右子树也是排序二叉树。
在构造完成排序二叉树后进行一次中序遍历就可以了。
用的是STL神器,map + priority_queue。(C++提交和G++提交相差6s !)
View Code
#include <map> #include <queue> #include <string> #include <iostream> #include <iterator> #include <stdio.h> using namespace std; typedef pair<string, double> psi; int main() { string s; map<string, int> m; priority_queue<psi, vector<psi>, greater<psi> > q; int sum = 0; while(getline(cin, s) != NULL) { if(m.find(s) == m.end()) m[s] = 1; else m[s] ++; sum ++; } psi tmp; for (map<string, int>::iterator iter = m.begin(); iter != m.end(); ++iter) { tmp.first = iter->first; tmp.second = (iter->second + 0.0) / sum; q.push(tmp); } while(!q.empty()) { cout << q.top().first << " "; printf("%.4f\n", q.top().second * 100); q.pop(); } return 0; }
这题更好的一个做法是用排序二叉树,根据排序二叉树的性质:
若他的左子树不空,则左子树上所有的结点均小于它的根结点的值。
若他的右子树不空,则右子树上所有的结点均大于它的根结点的值。
他的左右子树也是排序二叉树。
在构造完成排序二叉树后进行一次中序遍历就可以了。
相关文章推荐
- POJ2418 Hardwood Species(二叉搜索树+字典树+MAP)
- POJ2418Hardwood Species
- poj2418 Hardwood Species
- POJ2418:字典树:Hardwood Species(二叉搜索树)
- [poj2418]Hardwood Species
- poj2418 Hardwood Species 排序二叉树
- POJ2418--- Hardwood Species
- POJ2418--Hardwood Species【map】
- poj2418 Hardwood Species
- poj2418 - Hardwood Species
- poj2418~Hardwood Species~二叉排序树
- POJ2418 Hardwood Species(字典树+字符串排序)
- poj2418(Hardwood Species)
- poj 2418 Hardwood Species
- poj&nbsp;2418&nbsp;Hardwood&nbsp;Species
- Hardwood Species
- POJ2418 Hardwood Species—二叉查找树应用
- POJ 2418 Hardwood Species(map)
- POJ 2418 Hardwood Species(STL中map的应用)
- POJ 2418 Hardwood Species 【STL】