제출 #1335296

#제출 시각아이디문제언어결과실행 시간메모리
1335296Muhammad_AneeqRima (COCI17_rima)C++20
56 / 140
559 ms49992 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
int const N=3e6+10,d=727,mod=1e9+7;
vector<int>s[N]={};
bool com(string a,string b)
{
    return (a.size()<b.size());
}
int hash1(string a)
{
    int hsh=0;
    for (int i=1;i<a.size();i++)
        hsh=(hsh*d+a[i])%mod;
    return hsh;
}
int hash2(string a)
{
    int hsh=0;
    for (int i=0;i<a.size();i++)
        hsh=(hsh*d+a[i])%mod;
    return hsh;
}
inline void solve()
{
    int n;
    cin>>n;
    string a[n]={};
    for (auto&i :a)
        cin>>i;
    int ans[n]={};
    for (int i=0;i<n;i++)
        s[a[i].size()].push_back(i);
    for (int i=1;i<N;i++)
    {
        if (s[i].size()==0)
            continue;
        map<int,int>cnt;
        for (auto j:s[i])
            cnt[hash1(a[j])]++;
        for (auto j:s[i])
            ans[j]=cnt[hash1(a[j])];
        map<int,int>ava;
        for (auto j:s[i-1])
            ava[hash2(a[j])]=ans[j];
        for (auto j:s[i])
        {
            int f=hash1(a[j]);
            if (ava.find(f)!=ava.end())
                ans[j]+=ava[f];
        }
    }
    int mx=0;
    for (int i=0;i<n;i++)
        mx=max(ans[i],mx);
    cout<<mx<<endl;
}
signed main()
{
    ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
    int t=1;
    for (int i=1;i<=t;i++)
    {
        solve();
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...