POJ 2418 字典树 or map

e......

DESCRIPTION:

给你许多种名字可以重复。要求你统计每种名字的比例。按照字典序输出每种名字及其所占比例、可以用字典树快速存储,输出大量字符串。

也可以用map。但是。map不太熟。输出好烦。为什么key值是字符数组的时候只能用Cout不能是printf。也不能用各种字符数组的函数呢。什么鬼!T_T用完C++还有编译器C++WA。G++AC。>_<。

附代码:
map:

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<iomanip>
#include<map>
using namespace std;

int main()
{
    char word[45];
    map<string, int>m;
    map<string, int>::iterator iter;
    m.clear();
    int cnt = 0;
    while (gets(word))
    {
       m[word]++;
       cnt++;
    }
    for (iter=m.begin(); iter != m.end(); ++iter)
    {
        double temp = iter->second*100.0;
        //printf("%s %.4f\n",t, iter->first, temp/cnt);
        cout<<setiosflags(ios::fixed)<<setprecision(4)<<iter->first<<" "<<100.0*(iter->second)/cnt<<endl;
    }
    return 0;
}

字典树:
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#define maxn 172
using namespace std;

struct Tree
{
    Tree *nxt[maxn];
    int num;
    char name[45];
    bool isleaf;
    Tree()
    {
        for (int i=0; i<maxn; ++i)
        {
            nxt[i] = NULL;
        }
        num = 0;
        isleaf = false;
    }
}Root;

int cnt = 0;

void creatTree(char str[])
{
     int len = strlen(str);
     Tree *root = &Root;
     for (int i=0; i<len; ++i)
     {
         int temp = int (str[i]);
         if (root->nxt[temp] == NULL)
         {
             root->nxt[temp] = new Tree;
         }
         root = root->nxt[temp];
     }
     strcpy(root->name, str);
     root->num++;
     root->isleaf = true;
}

void f_put(Tree *p)
{
    if (p->isleaf)
        printf("%s %.4f\n", p->name, p->num*100.0/cnt);
    for (int i=0; i<maxn; ++i)
    {
        if (p->nxt[i])
            f_put(p->nxt[i]);
    }
}

int main()
{
    char str[45];
    while (gets(str))
    {
        creatTree(str);
        cnt++;
    }
    Tree *now = &Root;
    f_put(now);
    return 0;
}

时间: 2024-10-27 07:32:49

POJ 2418 字典树 or map的相关文章

POJ 2418 字典树

题目链接:http://poj.org/problem?id=2418 题意:给定一堆树的名字,现在问你每一棵树[无重复]的出现的百分比,并按树名的字典序输出 思路:最简单的就是用map来写,关于字典树的解法,因为字典序的先序遍历是排序的,所以只需建好树后先序遍历一下树就可以满足题目要求的输出方式了. 坑点:树名会出现空格,而且题目也没说明可能出现的字符集合,所以树的孩子结点要有128个. G++无限WA换C++就能AC,这个无解... map: #define _CRT_SECURE_NO_D

POJ 2503 字典树

这题记得以前是我们周赛的题,然后用的是map,也暴过了. 因为这两天要给大一的讲字典树,所以练练几道的代码,以防给大一搞晕了-- #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<map> #include<queue> #include<set> #include<cmath> #include

hdu1251 字典树or map

一道字典树的题,不过看起来用map更为简单 传送门 题意: 给出一堆字符串构成一个字典,求字典里以某字符串为前缀的字符串有几个 思路: 输入字符串时把字符串的前缀全部存进map并标记次数 查询时直接输出就可以了 AC代码: 1 #include "stdio.h" 2 #include "map" 3 #include "string" 4 #include "string.h" 5 #include "iostre

poj 3764 字典树

The xor-longest Path Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7332   Accepted: 1555 Description In an edge-weighted tree, the xor-length of a path p is defined as the xor sum of the weights of edges on p: ⊕ is the xor operator. We

POJ - 2418 Hardwood Species(map,trie,BST)

1.输入若干行树名,输入结束后,按字典序输出树名及其所占百分比. 2.多种方法:map,trie,BST 3. map: #include<iostream> #include<stdio.h> #include<string> #include<map> using namespace std; int main(){ map<string,int>h; string s; int n; n=0; while(getline(cin,s)){

POJ 2001 字典树(入门题)

#include<cstdio> #include<algorithm> #include<iostream> #include<cstring> #include<vector> #include<stack> #include<cmath> #include<queue> #include<map> using namespace std; struct Node { int c; int ne

POJ 2513(字典树hash+并查集+欧拉通路)

Colored Sticks Time Limit: 5000MS   Memory Limit: 128000K Total Submissions: 31015   Accepted: 8180 Description You are given a bunch of wooden sticks. Each endpoint of each stick is colored with some color. Is it possible to align the sticks in a st

POJ 2513 字典树+并查集+欧拉路径

Description: 给定一些木棒,木棒两端都涂上颜色,求是否能将木棒首尾相接,连成一条直线,要求不同木棒相接的一边必须是相同颜色的. 解题思路: 可以用图论中欧拉路的知识来解这道题,首先可以把木棒两端看成节点,把木棒看成边,这样相同的颜色就是同一个节点 问题便转化为: 给定一个图,是否存在“一笔画”经过涂中每一点,以及经过每一边一次. 这样就是求图中是否存在欧拉路Euler-Path.(我才知道这个就是欧拉路径...T_T) 由图论知识可以知道,无向图存在欧拉路的充要条件为: ①    

POJ 2503 Babelfish (Trie树 或 map)

Babelfish Time Limit: 3000MS        Memory Limit: 65536K Total Submissions: 34278        Accepted: 14706 Description You have just moved from Waterloo to a big city. The people here speak an incomprehensible dialect of a foreign language. Fortunately