当前位置: 首页 > 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.jsqmd.com/news/12380/

相关文章:

  • 【IMU】6轴数据校准算法
  • 2025 年 MES 服务商 TOP 平台机构推荐排行榜,mes 系统 /mes 软件 /mes 制造执行系统 /mes 生产制造执行系统 /mes 生产管理系统公司推荐
  • 2025 年10月 WMS 服务商最新推荐榜单,wms系统 wms软件,wms仓库管理软件,wms仓库管理系统软件公司推荐
  • 【仿生机器人】核心采购清单 (仿生机器人头方案)
  • CF数据结构题做题记录-1
  • 完整教程:安宝特产品丨FME Realize:重构数据与现实的边界,让空间计算赋能现场决策
  • 尝试对音频功率放大器芯片的噪声基底特性进行测量与计算:以纳芯威NS4268为例
  • 常见问题解决 --- wireshark安装失败
  • Node.js 性能优化:实用技巧与实战指南 - 教程
  • perl语言中的三目运算符和do代码块
  • ll
  • CCPC2023女生专场 游记(VP)
  • tp3.2不再生成Runtime/Logs日志
  • 2.5 分布式学习(Distributed Learning)
  • 心得:刷算法的痛点-只根据题目的case思考,不考虑边界情况,写出一坨shit
  • 11-Redis 集合类型深度指南:从去重特性到集合运算场景落地 - 详解
  • OI 数论 1
  • 2.4 DQN 变体(Rainbow)
  • Linux存储媒介devmount
  • 单片机--概述 - 指南
  • Emacs折腾日记(三十二)——org mode的基本美化
  • pp
  • 2025 工业风机十大品牌全景解析报告:覆盖离心风机,防爆风机,矿用风机的最新推荐
  • 详细介绍:P3.7计算机视觉
  • 2.3 深度 Q 网络(Deep Q-Network, DQN)
  • Linux系统目录(文件)结构
  • 实用指南:如何读懂Mach-O:构建macOS和iOS应用安全的第一道认知防线
  • vim配置使用
  • shell高级
  • shell流程控制