P2580-于是他错误的点名开始了【Trie,字符串】
生活随笔
收集整理的這篇文章主要介紹了
P2580-于是他错误的点名开始了【Trie,字符串】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
正題
評測記錄:https://www.luogu.org/recordnew/lists?uid=52918&pid=P2580
題目大意
給n個字符串,用m個字符串和他們匹配,分為錯誤匹配,重復匹配,正確匹配。
解題思路
裸的TrieTrie(字典樹)
code
#include<cstdio> #include<cstring> using namespace std; int n,tot,m,l[800000][26];; char s[101]; bool pre[800000],ok[800000]; void insert(char *s)//插入 {int len=strlen(s),now=0;for(int i=0;i<len;i++){int ch=s[i]-'a';if(!l[now][ch]) l[now][ch]=++tot;//新建節點now=l[now][ch];//下一個點}pre[now]=true;return; } void find(char *s) {int len=strlen(s),now=0;for(int i=0;i<len;i++){int ch=s[i]-'a';if(!l[now][ch])//錯誤匹配{printf("WRONG\n");return;}now=l[now][ch];}if(!pre[now]) printf("WRONG\n");//錯誤匹配else if(ok[now]) printf("REPEAT\n");//重復匹配else {printf("OK\n");ok[now]=true;}//正確匹配和標記return; } int main() {scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%s",s);insert(s);}scanf("%d",&m);for(int i=1;i<=m;i++){scanf("%s",s);find(s);}return 0; }總結
以上是生活随笔為你收集整理的P2580-于是他错误的点名开始了【Trie,字符串】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 好的英文网名 好的英文网名大全
- 下一篇: P2922-[USACO08DEC]秘密