codeforces #291 div2 C(Trie,DFS)

本文介绍了一种利用字典树(Trie)解决字符串匹配问题的方法。通过构建静态字典树并使用深度优先搜索(DFS)策略,实现对大量字符串的有效查询。文章提供了完整的C++代码实现,并展示了如何通过修改字符来寻找匹配。

2015-02-15 04:22:53

思路:一道比较明显的字典树... 看起来数据会比较大,所以用静态版Trie比较保险。

  把所有的初始串读进Trie中,然后就是Dfs来枚举哪一位不一样了。

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <cstdlib>
 4 #include <cmath>
 5 #include <vector>
 6 #include <map>
 7 #include <set>
 8 #include <stack>
 9 #include <queue>
10 #include <string>
11 #include <iostream>
12 #include <algorithm>
13 using namespace std;
14 
15 #define MEM(a,b) memset(a,b,sizeof(a))
16 #define REP(i,n) for(int i=1;i<=(n);++i)
17 #define REV(i,n) for(int i=(n);i>=1;--i)
18 #define FOR(i,a,b) for(int i=(a);i<=(b);++i)
19 #define RFOR(i,a,b) for(int i=(a);i>=(b);--i)
20 #define getmid(l,r) ((l) + ((r) - (l)) / 2)
21 #define MP(a,b) make_pair(a,b)
22 
23 typedef long long ll;
24 typedef pair<int,int> pii;
25 const int INF = (1 << 30) - 1;
26 
27 int n,m,tlen,tot;
28 char s[6000005];
29 
30 struct Trie{
31     int next[3];
32     int v;
33 }t[6000005];
34 
35 void Insert_tree(char *str){
36     int len = strlen(str);
37     int p = 0;
38     for(int i = 0; i < len; ++i){
39         int id = str[i] - 'a';
40         if(t[p].next[id] == 0){
41             t[p].next[id] = ++tot;
42         }
43         p = t[p].next[id];
44     }
45     t[p].v = 1;
46 }
47 
48 bool Dfs(int cur,int p,int flag){
49     if(p >= tlen){
50         if(flag && t[cur].v) return true;
51         else return false;
52     }
53     int id = s[p] - 'a';
54     if(flag == 0){ //change
55         for(int i = 0; i < 3; ++i) if(i != id && t[cur].next[i]){
56             if(Dfs(t[cur].next[i],p + 1,1))
57                 return true;
58         }
59     }
60     if(t[cur].next[id] && Dfs(t[cur].next[id],p + 1,flag)) //no change
61         return true;
62     return false;
63 }
64 
65 int main(){
66     tot = 0;
67     scanf("%d%d",&n,&m);
68     REP(i,n){
69         scanf("%s",s);
70         Insert_tree(s);
71     }
72     REP(i,m){
73         scanf("%s",s);
74         tlen = strlen(s);
75         if(Dfs(0,0,0)) printf("YES\n");
76         else printf("NO\n");
77     }
78     return 0;
79 }

 

转载于:https://www.cnblogs.com/naturepengchen/articles/4293106.html

【从高压输电线的架空地线中汲取电能】一个25千瓦受控电源从735千伏线路的架空地线中汲取电能的SimPowerSystems模型(Simulink仿真实现)内容概要:本文介绍了一个基于SimPowerSystems的Simulink仿真模型,用于模拟从735千伏高压输电线的架空地线中汲取25千瓦电能的受控电源系统。该模型聚焦于高压输电线路中架空地线的能量回收技术,通过仿真手段实现对电能采集过程的建模与控制策略验证,体现了电力系统中新型能源获取方式的技术可行性与工程应用潜力。文中还提及该资源属于一系列电力系统仿真研究的一部分,涵盖微电网、储能优化、碳流追踪、鲁棒调度等多个前沿方向,配套提供Matlab/Simulink代码及网盘资料链接,便于科研人员复现与拓展研究。; 适合人群:具备电力系统基础知识、熟悉Matlab/Simulink仿真环境,从事电力工程、能源回收或智能电网相关研究的科研人员及研究生;有一定编程与建模仿真经验的高年级本科生或工程技术人员。; 使用场景及目标:①研究高压输电线路中架空地线的能量回收机制与建模方法;②掌握基于Simulink的电力系统仿真技术,特别是受控电源与电网交互的动态特性分析;③为开展能源 harvesting、分布式供能、电力电子变换器控制等相关课题提供参考模型与技术支撑; 阅读建议:建议结合提供的仿真模型文件进行实操演练,重点理解系统结构设计、参数设置与控制逻辑实现;同时可延伸学习文档中提到的其他电力系统优化与仿真案例,以拓宽研究视野和技术积累。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值