Submission #116828

#TimeUsernameProblemLanguageResultExecution timeMemory
116828nhimnam120Lozinke (COCI17_lozinke)C++14
5 / 100
45 ms3304 KiB
#include<bits/stdc++.h>
#define fi first
#define se second
using namespace std;
vector<pair<long long, string> > inp;
vector<long long> adj[20005];
long long vs[20005];
signed main(){
	long long n;
	cin >> n;
	for(int i=0;i<n;i++){
		string s;
		cin >> s;
		inp.push_back({s.size(),s});
	}
	long long ans=0;
	sort(inp.begin(),inp.end());
	for(int i=0;i<n;i++){
		for(int j=0;j<i;j++){
			if(inp[i].fi==inp[j].fi){
				if(inp[i].se==inp[j].se){
					for(auto t: adj[j]){
						adj[j].push_back(t);
						vs[t]=i;
					}
					adj[i].push_back(j);
					//cout << inp[i].se<< " " << inp[j].se<<endl;
					ans+=2;
				}
			}
			else{
				if(vs[j]==i){
					ans++;
					continue;
				}
				string a=inp[i].se;
				string b=inp[j].se;
				//cout << a << " " << b<< " " <<inp[i].fi-inp[j].fi+1<< " "<< ans<<" ";
				for(int k=0;k<inp[i].fi-inp[j].fi+1;k++){
					if(a[k]==b[0]){
						long long test=0;
						for(int l=0;l<inp[j].fi;l++){
							if(a[k+l]!=b[l]){
								test=1;
								break;
							}
						}
						if(test==0){
							for(auto t: adj[j]){
								adj[j].push_back(t);
								vs[t]=i;
							}
							adj[i].push_back(j);
							ans++;
							break;
						}
					}
				}
				//cout << ans <<endl;
			}
		}
	}
	cout << ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...