無感,擺爛。。。。。。
目錄
- 彙編實驗報告 30minutes
- 作業系統文獻閱讀+PPT 3H
- 六級單詞
- 退役acmer的每日一題*11
彙編實驗報告 30minutes
報告內容比較少,完成的比較快的其實。
作業系統文獻閱讀+PPT 3H
只剩下最後一部分的PPT
六級單詞
140個單詞,聽力一會聽力,感覺要寄寄,但是作業真的好多。
退役acmer的每日一題*11
題目連結:https://atcoder.jp/contests/abc353/tasks/abc353_e
思路分析:當第一眼看見題目的時候,我就想用字典樹,建好樹之後進行dfs,但是不會字典樹,很慚愧。然後看了一眼,發現其實挺簡單的。然後,發現其實不用dfs,因為建樹的過程本身就是一個dfs的過程,不如直接在建樹的過程中進行維護和統計答案,其實就是記錄一下每個點被多少個字串佔位。這個很字典樹。可以看一下這位大哥的題解:https://blog.csdn.net/weixin_73550568/article/details/138735501
程式碼實現:
#include<bits/stdc++.h>
#define int long long
#define endl '\n'
#define ios ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
using namespace std;
const int N=3e5+10;
const int MAX=1e6+5;
const int mod=1E9+7;
int n,m,k,w;
int trie[N][26];
int cnt[N];
int id;
void solve(){
cin>>n;
string s;
while(cin>>s){
int p=0;
for(int i=0;i<s.size();i++){
cnt[p]++;
if(trie[p][s[i]-'a']==0)trie[p][s[i]-'a']=++id;
p=trie[p][s[i]-'a'];
}
cnt[p]++;
}
int ans=0;
for(int i=1;i<=id;i++){
ans+=(cnt[i]-1)*cnt[i]/2;
}
cout<<ans<<endl;
}
signed main(){
ios;
int t;
t=1;
//cin>>t;
while (t--){
solve();
}
return 0;
}