POJ 2418 Hardwood Species (哈希,%f 和 %lf)
我的错因: 本来改用%f输出,我用了%lf,结果编译器直接判定为错误(一部分编译器认为lf是没有错的)。当时我还以为是hash出错了。。
方法不止一种:
方法 时间 空间
Hash 891ms 596k
map<string,int> 2735ms 1316k
sort 5000ms+ 30000k+
%lf 与 %f的具体区别:
printf的%f说明符的确既可以输出float型又可以输出double型。根据“默认参数提升”规则float型会被提升为double型。因此printf()只会看到双精度数。对于scanf,情况就完全不同了,它接受指针,这里没有类似的类型提升。向float存储和向double存储大不一样,因此,scanf区别%f和%lf。
也就是说输出的时候不管输出的是双精度还是单精度都用%f就没错了,但是输入的时候,输入单精度要用%f而输入双精度要用%lf。
哈希
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#include<sstream>
using namespace std;
struct Tree
{
char name[];
int sum;
} tree[];
int SDBMHash(char *str)
{
int Hash = ;
while(*str)
{
Hash = (*str++) + (Hash << ) + (Hash << ) - Hash;
}
return (Hash&0x7FFFFFFF);
}
bool cmp(Tree a,Tree b)
{
return strcmp(a.name,b.name)<;
}
map<int,int> pos;
int main()
{
// freopen("H.in.cpp","r",stdin);
char tmp[];
pos.clear();
int tot = ,all = ;
while(gets(tmp))
{
if(strcmp(tmp,"") == ) break;
all++;
int H = SDBMHash(tmp);
int id = pos[H];
if(id == )
{
strcpy(tree[++tot].name,tmp);
tree[tot].sum = ;
pos[H] = tot;
}
else
{
tree[id].sum++;
}
}
sort(tree+,tree++tot,cmp);
for(int i = ; i <= tot; i++)
{
printf("%s %.4f\n",tree[i].name,tree[i].sum*100.0/all);
}
return ;
}
map<string,int>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#include<sstream>
using namespace std;
struct Tree
{
string name;
int sum;
} tree[];
bool cmp(Tree a,Tree b)
{
return a.name < b.name;
}
map<string,int> vis;
int main()
{
// freopen("H.in.cpp","r",stdin);
char a[];
string tmp;
vis.clear();
int tot = ,all = ;
while(gets(a))
{
all++;
int len = strlen(a);
tmp = "";
for(int i = ; i < len; i++)
{
tmp += a[i];
}
int id = vis[tmp];
if(id == )
{
tree[++tot].name = tmp;
tree[tot].sum = ;
vis[tmp] = tot;
}
else
{
tree[id].sum++;
}
}
sort(tree+,tree+tot+,cmp);
for(int i = ; i <= tot; i++)
{
cout<<tree[i].name<<" ";
printf("%.4f\n",tree[i].sum*100.0/all);
}
return ;
}
排序
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#include<sstream>
using namespace std;
struct Tree
{
char name[];
} tree[];
bool cmp(Tree a,Tree b)
{
return strcmp(a.name,b.name)<;
}
int main()
{
// freopen("H.in.cpp","r",stdin);
int all = ;
while(gets(tree[all].name) && strlen(tree[all].name))
{
all++;
}
sort(tree,tree+all,cmp);
int tot = ;
for(int i = ; i < all; i++)
{
if(strcmp(tree[i].name,tree[i+].name) == ) tot++;
else
{
printf("%s %.4f\n",tree[i].name,tot*100.0/all);
tot = ;
}
}
return ;
}
POJ 2418 Hardwood Species (哈希,%f 和 %lf)的更多相关文章
- [字典树] poj 2418 Hardwood Species
题目链接: id=2418">http://poj.org/problem?id=2418 Hardwood Species Time Limit: 10000MS Memory ...
- POJ 2418 Hardwood Species
Hardwood Species Time Limit: 10000MS Memory Limit ...
- POJ 2418 Hardwood Species(STL在map应用)
职务地址:id=2418">POJ 2418 通过这个题查了大量资料..知道了非常多曾经不知道的东西. . .. 在代码中凝视说明吧. 代码例如以下: #include <ios ...
- [ACM] POJ 2418 Hardwood Species (Trie树或map)
Hardwood Species Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 17986 Accepted: 713 ...
- poj 2418 Hardwood Species (map)
题目:http://poj.org/problem?id=2418 在poj 上交题总是有各种错误,再次感叹各个编译器. c++ AC代码,G++为超时,上代码: #include<cstdio ...
- POJ - 2418 Hardwood Species(map,trie,BST)
1.输入若干行树名,输入结束后,按字典序输出树名及其所占百分比. 2.多种方法:map,trie,BST 3. map: #include<iostream> #include<st ...
- 二叉搜索树 POJ 2418 Hardwood Species
题目传送门 题意:输入一大堆字符串,问字典序输出每个字符串占的百分比 分析:二叉搜索树插入,然后中序遍历就是字典序,这里root 被new出来后要指向NULL,RE好几次.这题暴力sort也是可以过的 ...
- POJ 2418 Hardwood Species( AVL-Tree )
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <string.h> ...
- POJ 2418 Hardwood Species 【Trie树】
<题目链接> 题目大意: 给你一堆字符串,让你按字典序输出他们出现的频率. 解题分析: 首先,这是Trie数词频统计的题目,以Trie树的边储存字母,节点存储以该节点结尾的链所代表的字符串 ...
随机推荐
- 【IE6的疯狂之二】IE6中PNG Alpha透明(全集)
ie7,fireofx,opera,及至webkit内核的chrome ,safari….. 这些浏览器均支持png的Alpha透明. 很多人说IE6不支持PNG透明,其实IE支持100%透明的PNG ...
- nginx 403
location / { autoindex on; } chown -R www-data:www-data /var/www usermod -a -G www-data rootnano /et ...
- Oracle SQL 关键字
1.UID返回标识当前用户的唯一整数SQL> show userUSER 为"GAO"SQL> select username,user_id from dba_use ...
- JPA 系列教程 异常 集锦
异常1.hibernate升级到3.5版本 异常信息摘要: Associations marked as mappedBy must not define database mappings like ...
- s14 第5天 时间模块 随机模块 String模块 shutil模块(文件操作) 文件压缩(zipfile和tarfile)shelve模块 XML模块 ConfigParser配置文件操作模块 hashlib散列模块 Subprocess模块(调用shell) logging模块 正则表达式模块 r字符串和转译
时间模块 time datatime time.clock(2.7) time.process_time(3.3) 测量处理器运算时间,不包括sleep时间 time.altzone 返回与UTC时间 ...
- jsvc 以daemon方式运行tomcat
原理: 使用jsvc来运行服务,没有了默认8005的shutdown端口: 主进程pid为1,fork 2个进程 运行方式参考:http://commons.apache.org/proper/com ...
- npm 使用代理
npm install 有时候会安装失败,可能是网络的问题,可以使用代理来安装 npm获取配置有6种方式,优先级由高到底. 命令行参数. --proxy http://server:port即将pro ...
- .net 中HttpClient 携带cookie传输
CookieContainer cookieContainer = new CookieContainer(); Cookie cookie = new Cookie("username&q ...
- hdu1026
#include <stdio.h> #include <string.h> #include <queue> using namespace std; struc ...
- javascript中关于this的理解
首先看一下这几个定义 this对象是在运行时基于函数的执行环境绑定的:在全局函数中,this等于window,而当函数被视为某个对象的方法调用时,this等于那个对象. 不过,匿名函数的执行环境具有全 ...