Submission #79935

#TimeUsernameProblemLanguageResultExecution timeMemory
79935luckyboyLozinke (COCI17_lozinke)C++14
40 / 100
1085 ms12780 KiB
#include <bits/stdc++.h> #define FOR(i, a, b) for (int i = (a); i <= (b); ++i) #define FORD(i, a, b) for (int i = (a); i >= (b); --i) #define pb push_back #define mp make_pair #define F first #define S second #define maxc 1000000007 #define maxn 20005 #define maxm 500005 #define pii pair <int,int> #define Task "Lozinke" using namespace std; int n; string s[maxn]; long long a[maxn][100],top[maxn],b[maxn],top1,ans; int main() { ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); //freopen(Task".inp", "r",stdin); //freopen(Task".out", "w",stdout); cin >> n; FOR(i,1,n) { cin >> s[i]; int temp = s[i].size(); FOR(j,0,temp-1) { long long cur = 0; FOR(k,1,temp - j) { cur = cur * 27 + (s[i][j+k-1] - 'a' + 1); a[i][++top[i]] = cur; } } sort(a[i] + 1,a[i] + top[i] + 1); top[i] = unique(a[i]+1 , a[i] + top[i] + 1) - a[i] - 1; FOR(j,1,top[i]) { ans += upper_bound(b+1,b+top1+1,a[i][j]) - lower_bound(b+1,b+top1+1,a[i][j]); } b[++top1] = a[i][top[i]]; sort(b+1,b+top1+1); } top1 = 0; FORD(i,n,1) { FOR(j,1,top[i]) { ans += upper_bound(b+1,b+top1+1,a[i][j]) - lower_bound(b+1,b+top1+1,a[i][j]); } b[++top1] = a[i][top[i]]; sort(b+1,b+top1+1); } cout << ans; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...