重新振作第15天----悲傷逆流成河

菜dog的日常生活發表於2024-12-06

無感,擺爛。。。。。。

目錄
  • 彙編實驗報告 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;
}

相關文章