日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HDU 5384 Danganronpa (2015年多校比赛第8场)

發布時間:2025/5/22 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDU 5384 Danganronpa (2015年多校比赛第8场) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.題目描寫敘述:點擊打開鏈接

2.解題思路:本題利用字典樹解決。本題要求查找全部的B[j]在A[i]中出現的總次數。那么我們能夠建立一顆字典樹,將全部的B[j]插入字典樹,因為一個串的全部字串相當于它全部后綴的前綴。

因此在查找時候,僅僅須要查找A[i]的每個后綴就可以,然后累加這個后綴的前綴個數,就可以得到該后綴中子串的個數。全部后綴的值相加,就是終于的答案。

3.代碼:

#pragma comment(linker, "/STACK:1024000000,1024000000") #include<iostream> #include<algorithm> #include<cassert> #include<string> #include<sstream> #include<set> #include<vector> #include<stack> #include<map> #include<queue> #include<deque> #include<cstdlib> #include<cstdio> #include<cstring> #include<cmath> #include<ctime> #include<cctype> #include<functional> using namespace std;typedef long long ll; typedef unsigned int uint; typedef unsigned long long ull; typedef pair <int, int> P;const int N=100000+10; int n,m; char A[N][10005]; char B[N]; struct Trie {int tree[N][26],val[N],cnt;Trie(){init();}void init(){cnt=1;memset(tree,0,sizeof(tree));}void insert(char*s){int p=0,l=strlen(s);for(int i=0;i<l;i++){int a=s[i]-'a';if(!tree[p][a]){val[cnt]=0;tree[p][a]=cnt++;}p=tree[p][a];}++val[p];}int query(char*s){int p=0,l=strlen(s),ans=0;for(int i=0;i<l;i++){int a=s[i]-'a';if(!tree[p][a])return ans;p=tree[p][a];ans+=val[p];}return ans;} }T;int main() {int t;scanf("%d",&t);while(t--){scanf("%d%d",&n,&m);T.init();for(int i=0;i<n;i++)scanf("%s",A[i]);ll ans;for(int i=0;i<m;i++){scanf("%s",B);T.insert(B);//將全部的B[j]插入字典樹}for(int i=0;i<n;i++){ans=0;int l=strlen(A[i]);for(int j=0;j<l;j++)ans+=T.query(A[i]+j);//枚舉后綴的前綴在字典樹中出現多少次,得到該后綴的返回值,累加就是答案printf("%I64d\n",ans);}} }

總結

以上是生活随笔為你收集整理的HDU 5384 Danganronpa (2015年多校比赛第8场)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。