重新振作第15天----悲伤逆流成河
无感,摆烂。。。。。。
汇编实验报告 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;
}