zoukankan      html  css  js  c++  java
  • [HDOJ5384]Danganronpa

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5384

    字典树过,把子弹存入树内,再穷举每一个怪物的子串,看看子串是否在树内存在。

     1 #include <cstdio>
     2 #include <cstdlib>
     3 #include <cstring>
     4 #include <algorithm>
     5 #include <iostream>
     6 #include <cmath>
     7 #include <cctype>
     8 #include <queue>
     9 #include <map>
    10 #include <set>
    11 #include <stack>
    12 #include <list>
    13 #include <vector>
    14 
    15 using namespace std;
    16 
    17 const int maxn = 100010;
    18 int n, m;
    19 string a[maxn];
    20 char b[maxn];
    21 
    22 typedef struct Node {
    23     Node *next[26];
    24     int cnt;
    25     Node() {
    26         cnt = 0;
    27         for(int i = 0; i < 26; i++) {
    28             next[i] = NULL;
    29         }
    30     }
    31 }Node;
    32 
    33 void insert(Node *p, char *str) {
    34     for(int i = 0; str[i]; i++) {
    35         int t = str[i] - 'a';
    36         if(p->next[t] == NULL) {
    37             p->next[t] = new Node();
    38         }
    39         p = p->next[t];
    40     }
    41     p->cnt++;
    42 }
    43 
    44 int find(Node *p, string str) {
    45     int res = 0;
    46     for(int i = 0; str[i]; i++) {
    47         int t = str[i] - 'a';
    48         if(p->next[t]) {
    49             p = p->next[t];
    50         }
    51         else {
    52             break;
    53         }
    54         res += p->cnt;
    55     }
    56     return res;
    57 }
    58 
    59 void tfree(Node *root) {
    60     for(int i = 0; i < 26; i++) {
    61         if(root->next[i] != NULL) {
    62             tfree(root->next[i]);
    63         }
    64     }
    65     delete root;
    66 }
    67 
    68 int solve(Node* root) {
    69     for(int i = 0; i < n; i++) {
    70         int ans = 0;
    71         for(int j = 0; j < a[i].size(); j++) {
    72             ans += find(root, a[i].substr(j));
    73         }
    74         printf("%d
    ", ans);
    75     }
    76 }
    77 
    78 int main() {
    79     // freopen("in", "r", stdin);
    80     int T;
    81     scanf("%d", &T);
    82     while(T--) {
    83         Node *root = new Node();
    84         scanf("%d %d", &n, &m);
    85         for(int i = 0; i < n; i++) {
    86             cin >> a[i];
    87         }
    88         for(int i = 0; i < m; i++) {
    89             scanf("%s", b);
    90             insert(root, b);
    91         }
    92         solve(root);
    93         tfree(root);
    94     }
    95     return 0;
    96 }
  • 相关阅读:
    指定HTML标签属性 |Specifying HTML Attributes| 在视图中生成输出URL |高级路由特性 | 精通ASP-NET-MVC-5-弗瑞曼
    传递额外的值 Passing Extra Values |在视图中生成输出URL | 高级路由特性 | 精通ASP-NET-MVC-5-弗瑞曼
    以其他控制器为目标 在视图中生成输出URL
    数组与指针(数组中所有元素的和)
    OC中的指针
    UIScrollView创建相册
    开发之UI篇
    TabBarController
    适配ipone5
    NSDate 哪些事
  • 原文地址:https://www.cnblogs.com/kirai/p/4782937.html
Copyright © 2011-2022 走看看