poj 2814(字典树Hardwood Species)

来源:互联网 发布:框架图制作软件 编辑:程序博客网 时间:2024/06/01 13:23
Hardwood Species
Time Limit: 10000MS Memory Limit: 65536KTotal Submissions: 23210 Accepted: 9032

Description

Hardwoods(硬木) are thebotanical(植物学的) group of trees that have broad leaves, produce a fruit or nut, and generally godormant(休眠的) in the winter.
America's temperate(温和的) climates produce forests with hundreds of hardwoodspecies(物种) -- trees that share certainbiological(生物的)characteristics(特征). Although oak, maple andcherry(樱桃) all are types of hardwood trees, for example, they are different species. Together, all the hardwood species represent 40 percent of the trees in the United States.

On the other hand, softwoods(软木材), orconifers(针叶树), from the Latin word meaning "cone-bearing," have needles. Widely available US softwoods includecedar(雪松), fir,hemlock(铁杉), pine,redwood(红木树),spruce(云杉) andcypress(柏树). In a home, the softwoods are used primarily asstructural(结构的)lumber(木材) such as 2x4s and 2x6s, with some limiteddecorative(装饰性的) applications.

Using satellite imaging technology, the Department of Natural Resources has compiled(编译) an inventory(存货) of every tree standing on a particular day. You are to compute the totalfraction(分数) of the tree population represented by each species.

Input

Input(投入) to your program consists of a list of thespecies(物种) of every tree observed by the satellite; one tree per line. No species nameexceeds(超过) 30 characters. There are no more than 10,000 species and no more than 1,000,000 trees.

Output

Print the name of each species represented in the population, inalphabetical(字母的) order, followed by the percentage of the population it represents, to 4decimal(小数) places.

Sample Input

Red AlderAshAspenBasswoodAshBeechYellow BirchAshCherryCottonwoodAshCypressRed ElmGumHackberryWhite OakHickoryPecanHard MapleWhite OakSoft MapleRed OakRed OakWhite OakPoplanSassafrasSycamoreBlack WalnutWillow

Sample Output

Ash 13.7931Aspen 3.4483Basswood 3.4483Beech 3.4483Black Walnut 3.4483Cherry 3.4483Cottonwood 3.4483Cypress 3.4483Gum 3.4483Hackberry 3.4483Hard Maple 3.4483Hickory 3.4483Pecan 3.4483Poplan 3.4483Red Alder 3.4483Red Elm 3.4483Red Oak 6.8966Sassafras 3.4483Soft Maple 3.4483Sycamore 3.4483White Oak 10.3448Willow 3.4483Yellow Birch 3.4483

Hint

This problem has huge input, use scanf instead of cin to avoid time limit exceeded.

Source

#include<iostream>#include<cstdio>#include<cstring>using namespace std;struct node{    int x;    struct node *next[130];    node()    {        x=0;       memset(next,0,sizeof(next));    }};struct node *root = NULL;int n;void build(char *s){    struct node *p=root,*tmp;    for(int i=0;s[i];i++)    {        if(p->next[s[i]]==NULL)        {            tmp=new node;            p->next[s[i]]=tmp;        }        p=p->next[s[i]];    }    p->x++;};void dfs(node *root){    static char word[31];    static int pos;    int i;    if(root->x)   //如果cnt不为0,则肯定找到了一个单词    {        word[pos]='\0';        if(word[0])            printf("%s %.4lf\n",word,root->x*100*1.0/n);    }    for(i=0;i<128;i++)    {        if(root->next[i])        {            word[pos++]=i;            dfs(root->next[i]);            pos--;        }    }}int main(){    char str[31];    n=0;    root=new node;    while(gets(str)&&str!="")    {        build(str);        n++;    }    dfs(root);    return 0;}


0 0
原创粉丝点击