Submission #141673

#TimeUsernameProblemLanguageResultExecution timeMemory
141673mariadincaLozinke (COCI17_lozinke)C++14
100 / 100
272 ms2408 KiB
#include <iostream> #include <map> #include <set> #include <algorithm> using namespace std; int n, sol, i, j, k, lung = 1; string s[20001], secc; map<string, int> m; set<string> secv; int cmp(string a, string b){ if(a.length() != b.length()) return a.length() < b.length(); return a < b; } int main(){ cin>>n; for(i=1;i<=n;i++) cin>>s[i]; /// parolele sort(s+1, s+n+1, cmp); /// acum trebuie sa iau fiecare cuvant, sa ii construiesc toate secventele si sa vad daca acele secvente pot debloca parole anterioare for(i=1;i<=n;i++){ secv.clear(); /// asta este setul in care voi pune toate secventele cuvantului curent for(j=0;s[i][j]!=0;j++){ secc.clear(); for(k=j;s[i][k]!=0;k++){ secc.push_back(s[i][k]); secv.insert(secc); } } for(set<string>:: iterator it = secv.begin(); it!=secv.end(); it++) /// acum parcurg toate secventele din cuvant si le caut in m if(m.find(*it) != m.end()) /// daca gasesc o secventa inainte de finalul lui m sol+=m[*it]; /// abia acum adaugam cuvantul curent in map if(m.find(s[i]) != m.end()) m[s[i]]++; else m[s[i]] = 1; } /// asta ar fi ok daca nu ar exista cuvinte identice /// pentru ca, in map, nu se repeta cuvintele for(i=2;i<=n;i++){ if(s[i] == s[i-1]) lung++; else lung = 1; sol += lung-1; } cout<<sol; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...