[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 }
View Code

以上是关于[poj 2418]Hardwood Species的主要内容,如果未能解决你的问题,请参考以下文章

POJ 2418 Hardwood Species (哈希,%f 和 %lf)

POJ3189 Steady Cow Assignment —— 二分图多重匹配/最大流 + 二分

更正连接查询。 C# 和 MySQL

红黑树习题分析

物种分布模型

Flutter Firebase - 从文档中获取特定字段