Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const long long INF64 = 4e18 + 5;
- const long double eps = 1e-10;
- const int SZ = 1e6 + 5;
- const int INF32 = 2e9 + 5;
- const int mod = 1e9 + 7;
- // #define int long long
- struct Node{
- unordered_map<char, Node *> mp;
- int val = 0;
- int cnt = 0;
- Node(){}
- };
- void add(Node *&v, string &s, int i = 0){
- if(s.size() == i){
- v->cnt = 1;
- return;
- }
- if(!v->mp[s[i]]) v->mp[s[i]] = new Node();
- add(v->mp[s[i]], s, i + 1);
- }
- void dfs(Node *&v){
- if(!v) return;
- v->val = v->cnt;
- for(auto &p : v->mp){
- dfs(p.second);
- v->val += p.second->val;
- }
- }
- void jfs(Node *&v, Node *&suffix, int &ans, char last = '?', int h = 0, string s = ""){
- if(h > 1)
- ans -= suffix->mp[last]->val;
- for(auto &p : v->mp)
- jfs(p.second, suffix, ans, p.first, h + 1, s + p.first);
- }
- int go(Node *&v, string &s, int i = 0){
- if(s.size() == i)
- return v->val;
- return go(v->mp[s[i]], s, i + 1);
- }
- void Solve(){
- int n; cin >> n;
- int S = 0;
- Node *prefix = new Node(), *suffix = new Node();
- {
- string t = "";
- add(suffix, t);
- }
- for(int i = 1; i <= n; i++){
- string s; cin >> s;
- string t = "";
- S += s.size();
- for(int j = 0; j < s.size(); j++){
- t += s[j];
- add(prefix, t);
- }
- for(int j = s.size() - 1; j >= 0; j--){
- string t = "";
- for(int k = j; k < s.size(); k++)
- t += s[k];
- add(suffix, t);
- }
- }
- dfs(prefix);
- dfs(suffix);
- int ans = 0;
- jfs(prefix, suffix, ans);
- {
- string s = "e";
- // cout << go(suffix, s) << endl;
- }
- ans += prefix->val * suffix->val - (S - n);
- cout << ans << '\n';
- }
- signed main(){
- ios_base::sync_with_stdio(NULL);
- cin.tie(NULL);
- cout.tie(NULL);
- srand(time(NULL));
- cout << fixed << setprecision(10);
- freopen("input.txt", "r", stdin);
- // freopen("eve.in", "r", stdin);
- // freopen("eve.out", "w", stdout);
- int test = 1;
- // cin >> test;
- for(int i = 1; i <= test; i++){
- Solve();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement