• 【UOJ 651】阔叶林


    【题目描述】:

    阔叶林是一种植物群落,其中的树木都具有叶子面子很大这一共同特征,多结坚果,冬天会进入休眠状态。美国的温度和气候创造了近百种阔叶物种,如橡树、枫树、樱桃树等等,阔叶树几乎占全美树种的40%左右。另一方面,针叶树在美国也随处可见,如雪松、冷杉、铁杉、红杉等。一般针叶树在家里被用作装饰性的木材。

    现自然资源部门使用卫星成像技术,在每一天都编制了一张图像清单,记录了一定范围内的每一颗树,现在需要你编程计算每一天卫星观测到的树种,所占的比例。

    【输入描述】:

    给出一张树的清单(由卫星拍摄,以树种名称给出),每一颗树占一行,树名不超过30个字符,其中树会重复出现,不会超过10,000个树种,也不会超过1,000,000棵树。

    【输出描述】:

    对于每个测例都需要按字典升序给出每种树的树名和其占总数的百分比(保留4位小数),每种树各占一行。

    【样例输入】:

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

    【样例输出】:

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

    【样例说明】:

    树名不超过30个字符,不一定只有字母,包括所有可见字符和空格ascii码范围为32~126。

    【时间限制、数据范围及描述】:

    时间:1s 空间:128M

    对于 30%数据:不会超过50个树种,也不会超过10,000棵树。

    对于 70%数据:不会超过50个树种,也不会超过100,000棵树。

    对于100%数据:不会超过1000个树种,也不会超过500,000棵树。

    题解:这道题好多做法啊,现附上trie树的做法啦!QWQ

              (一定要及时写博客mad,几天前写的代码今天就有几行没看懂,反应了好久awsl)

    #include<cstdio>
    #include<iostream>
    #include<cmath>
    #include<cstdlib>
    #include<cstring>
    #include<algorithm>
    #include<bits/stdc++.h>
    typedef long long ll;
    using namespace std;
    const int N=500005; 
    struct node{
        int c;
        map<char,int>p;
    }trie[N];
    int cnt=1,n;
    void inss(char *s){
        int i=0,u=1;
        while(s[i]){
            if(trie[u].p.count(s[i])) u=trie[u].p[s[i++]];
            else u=trie[u].p[s[i++]]=++cnt;
        }
        ++trie[u].c;
    }
    char yc[35],a[35];
    void dfs(int l,int u){
        if(trie[u].c){
            for(int i=0;i<l;i++) printf("%c",yc[i]);
            printf(" %.4f
    ",(double)trie[u].c/n*100);
        }
        for(int i=32;i<=126;++i)
            if(trie[u].p.count((char)i))  yc[l]=i, dfs(l+1,trie[u].p[i]); 
    }
    int main(){
        //freopen("kuo.in","r",stdin);
        //freopen("kuo.out","w",stdout); 
        while(gets(a)) { n++; inss(a); }
        //cout<<66;
        dfs(0,1);
        return 0;
    }
  • 相关阅读:
    介绍下自己的Delphi学习环境
    我所理解的Delphi中的数组类型
    字符串的基本操作
    以太网网络变压器的作用
    S3C2416 2D加速
    DM9000AEP调试的时候注意事项
    设置activity背景图片
    如何從現有的share library開發!?
    struct mntent linux挂载信息读取
    Qt中Qstring,char,int,QByteArray之间到转换
  • 原文地址:https://www.cnblogs.com/wuhu-JJJ/p/13511513.html
Copyright © 2020-2023  润新知