hdu 1504蛋疼的模拟

蛋疼的题目,测试数据都没说清楚,都想骂出题人了。细节部分好理解,就是模拟,打完以后不敢交,不知道测试数据中的1是啥,上网搜解题报告,居然没有,再一看过题数,63,我了个去。。。无奈只好自己试了,试了几次后发现1是测试数据总数。。。瀑布汗。。。

/*
 * hdu1504/win.cpp
 * Created on: 2012-7-31
 * Author    : ben
 */
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <queue>
#include <set>
#include <map>
#include <stack>
#include <string>
#include <vector>
#include <deque>
#include <list>
#include <functional>
#include <numeric>
#include <cctype>
using namespace std;
const int MAXN = 505;
const int MAXLEN = 85;
const int MAXNODE = 10000;
typedef struct TreeNode{
    char word[MAXLEN];
    int childnum;
    TreeNode *child[MAXN];
    void init() {
        memset(word, 0, sizeof(word));
        memset(child, 0, sizeof(child));
        childnum = 0;
    }
    void init(const char *str) {
        init();
        strcpy(word, str);
    }
    TreeNode() {
        init();
    }
}TreeNode;
typedef struct TreeNode* TreeLink;
TreeNode root[MAXNODE];
int N, cur;
inline TreeNode* newNode(const char *str) {
    root[cur].init(str);
    return &root[cur++];
}
TreeNode* myinsert(TreeNode *node, const char* str) {
    for(int i = 0; i < node->childnum; i++) {
        if(strcmp(node->child[i]->word, str) == 0) {
            return node->child[i];
        }
    }
    node->child[node->childnum] = newNode(str);
    return node->child[node->childnum++];
}
int work(char *str) {
    char *p = strtok(str, "\\");
    TreeNode *cur = root;
    while(p) {
        cur = myinsert(cur, p);
        p = strtok(NULL, "\\");
    }
    return 0;
}
inline bool cmp(const TreeLink &tl1, const TreeLink &tl2) {
    return strcmp(tl1->word, tl2->word) < 0;
}
void myprint(TreeNode *node, int bnum) {
    sort(node->child, node->child + node->childnum, cmp);
    if(node != root) {
        for(int i = 0; i < bnum; i++) {
            putchar(' ');
        }
        puts(node->word);
    }
    for(int i = 0; i < node->childnum; i++) {
        myprint(node->child[i], bnum + 1);
    }
}

int main() {
#ifndef ONLINE_JUDGE
    freopen("data.in", "r", stdin);
#endif
    int T;
    char str[200];
    scanf("%d", &T);
    for(int t = 0; t < T; t++) {
        scanf("%d", &N);
        cur = 1;
        root[0].init();
        for(int i = 0; i < N; i++) {
            scanf("%s", str);
            work(str);
        }
        myprint(root, -1);
        if(t != T - 1) {
            putchar('\n');
        }
    }
    return 0;
}

转载于:https://www.cnblogs.com/moonbay/archive/2012/08/01/2617593.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值