| # | Time | Username | Problem | Language | Result | Execution time | Memory | 
|---|---|---|---|---|---|---|---|
| 85414 | MohamedAhmed0 | Lozinke (COCI17_lozinke) | C++14 | 528 ms | 17624 KiB | 
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
/* Author : Mohamed Ahmed
   we should sort strings according to their size
   after that since that strings at most 10 letters so we can make map
   to store number of times that string occur and handle case if there's strings that equal
   and make another map to store number of times of substrings to handle case if there's two substrings equal
   and there's string equal to them so don't count it more than one and add to answer number of strings that same as this substring
   and after that increase number of times that current string appear
*/
#include <bits/stdc++.h>
using namespace std;
bool cmp(string &s , string &s1)
{
    return s.size() < s1.size() ;
}
int main()
{
    int n ;
    cin>>n ;
    string arr[n] ;
    for(int i = 0 ; i < n ; ++i)
        cin>>arr[i] ;
    sort(arr , arr + n , cmp) ;
    long long ans = 0ll ;
    map<string , int>mp ;
    for(int i = 0 ; i < n ; ++i)
    {
        string s = arr[i] ;
        map<string , int>mp2 ;
        ans += mp[s] ;
        for(int j = 0 ; j < s.size() ; ++j)
        {
            string s1 = "" ;
            for(int k = j ; k < s.size() ; ++k)
            {
                 s1 += s[k] ;
                 if(mp2[s1] != 1)
                    ans += mp[s1] * 1ll ;
                 mp2[s1] = 1 ;
            }
        }
        mp[s]++;
    }
    return cout<<ans , 0 ;
}
Compilation message (stderr)
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
