[poj 2418]Hardwood Species
Posted studyingfather
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[poj 2418]Hardwood Species相关的知识,希望对你有一定的参考价值。
题目链接
http://poj.org/problem?id=2418
大意
给出森林中每棵树的树种名称,求出森林中各树种的树占总数的百分比,保留4位小数(输出时树种名按字典序的升序排列)。
题解
其实这本来是一道BST的练习题,但是我们可以用现成的BST啊,干嘛要手写呢!
于是,map闪亮登场。
但C++终究是个玄学的东西,一方面用map要用到十分复杂的迭代器(毕竟poj还不支持C++11),另一方面是在输入输出上。
由于cout输出时很难做到像"%.2lf"这样保留若干位小数输出(cout可以控制保留的有效数字位数),所以不得不将printf和cout混合使用。
为了防止TLE,顺手加上了ios::sync_with_stdio(false);
然后,就出现了一些奇怪的事情。
上网查了一下,发现在scanf/printf和cin/cout同时使用时,不能将同步关闭,所以吓得赶快把那行注释掉了。
幸好,最后还是没有TLE。
1 #include <iostream> 2 #include <iomanip> 3 #include <map> 4 #include <string> 5 #include <iterator> 6 #include <algorithm> 7 #include <cstdio> 8 using namespace std; 9 map<string,int> tree; 10 string s; 11 int tot; 12 int main() 13 { 14 //ios::sync_with_stdio(false); 15 //请不要在关闭同步后同时使用cin/cout和scanf/printf,会出现不可预料的后果 16 while(getline(cin,s)) 17 { 18 tree[s]++; 19 tot++; 20 } 21 for(map<string,int>::iterator it=tree.begin();it!=tree.end();it++)//复杂的遍历方式 22 { 23 cout<<it->first<<‘ ‘; 24 printf("%.4lf\\n",it->second*100.0/tot); 25 } 26 return 0; 27 }
以上是关于[poj 2418]Hardwood Species的主要内容,如果未能解决你的问题,请参考以下文章
POJ 2418 Hardwood Species (哈希,%f 和 %lf)