当前位置: 首页 > news >正文

【Trie】 UVA1401 Remember the Word

代码

#include <string.h>
#include <stdlib.h>
#include <algorithm>
#include <vector>
#include <functional>
#include <math.h>
#include <string>
#include <iostream>using namespace std;typedef long long ll;
typedef pair<int, int> pii;#define _for(i, a, b) for (int i = (a); i < (b); i++)
#define _rep(i, a, b) for (int i = (a); i <= (b); i++)
#define fio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
#define reg register
#define ri reg intnamespace faio
{char buf[1 << 20], *p1, *p2;#define getchar() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 20, stdin), p1 == p2) ? EOF: *p1++)template <typename T> inline void read(T &t) {ri v = getchar();T f = 1;t = 0;while (!isdigit(v)) {if (v == '-')f = -1;v = getchar();}while (isdigit(v)) {t = (t << 3) + (t << 1) + v - '0';v = getchar();}t *= f;}template <typename T,typename... Args> inline void read(T &t, Args&... args) {read(t);read(args...);}
}constexpr int N = 300010, mod = 20071027;
char str[N], word[128];
int dp[N];typedef struct Trie_t
{bool is_end;Trie_t* son[26];
}*Trie;Trie NewNode() {Trie ret = (Trie) malloc(sizeof(Trie_t));for (int i = 0; i < 26; i++) ret->son[i] = NULL;ret->is_end = false;return ret;
}
void FreeNode(Trie p) { // 释放 Trie 树if (p == NULL) return ;for (int i = 0; i < 26; i++) FreeNode(p->son[i]);free(p);
}
void insert(Trie root, const char* _str)
{Trie u = root; int len = strlen(_str);for (int i = 0; i < len; i++) {int idx = _str[i] - 'a';if (u == NULL) printf("u is NULL");if (u->son[idx] == NULL) u->son[idx] = NewNode();u = u->son[idx];}u->is_end = true;
}
void solve(Trie root)
{static int Kase = 0;int n = strlen(str); dp[n] = 1;for (int i = n - 1; i >= 0; i--) {// 在 Trie 树里面找Trie u = root;for (int j = i; j < n; j++) {int idx = str[j] - 'a';if (u->son[idx] == NULL) break;u = u->son[idx];if (u->is_end) dp[i] = (dp[i] + dp[j + 1] + mod) % mod;}		}printf("Case %d: %d\n", ++Kase, dp[0]);
}int main()
{	while (scanf("%s", str) == 1) {int p; scanf("%d", &p);Trie root = NewNode();memset(dp, 0, sizeof(dp));while (p--) {scanf("%s", word);insert(root, word);}solve(root);FreeNode(root);}return 0;
}
http://www.dtcms.com/a/403152.html

相关文章:

  • 深度学习学习路线图:从MNIST到MobileNetV4,从理论到实践的完整指南
  • PyTorch 数据处理工具箱:从数据加载到可视化的完整指南
  • LinuxC++项目开发日志——基于正倒排索引的boost搜索引擎(4——通过jsoncpp库建立搜索模块)
  • LVS三种模式及原理
  • 有招聘网站策划的吗济南网站开发招聘
  • 【多线程】互斥锁(Mutex)是什么?
  • 18.1 Python+AI一键生成PPT!ChatPPT核心技术深度解析
  • 影响网站权重的因素有哪些wordpress 仪表盘 渗透
  • Nginx反向代理与缓存功能-第一章
  • 精读《C++20设计模式》——创造型设计模式:构建器系列
  • SpringCloud高可用集群搭建及负载均衡配置实战
  • AI产品独立开发完全指南:技术栈选择、案例分析与商业化路径
  • Jenkins+Tomcat持续集成教程
  • 哪里有免费建设网站承德在线
  • 【金融保研复习】知识点与可能的题目
  • 基于ZYNQ的ARM+FPGA+yolo AI火灾实时监测与识别系统
  • 【Python语法基础学习笔记】常用函数
  • Uniapp运行时错误修复报告
  • PHP 8.0+ 高级特性深度探索:架构设计与性能优化
  • 网站管理建设总结大数据营销的概念
  • 顺德品牌网站建设辽宁建设工程信息网上
  • Oracle Clint11g安装
  • Gerkin+unittest(python)实现自动化
  • MySQL基础语法大全
  • 从企业实战中学习Appium自动化(二)
  • Unity 使用ADB工具打包Apk 安装到Android手机或平板
  • 一、移动零,复写零,快乐数
  • React资源合集
  • sem是什么职业邢台做网站建设优化制作公司
  • 福建省建设执业资格注册中心网站企业建设网站注意点