-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathUsingHash.cpp
More file actions
70 lines (66 loc) · 1.72 KB
/
UsingHash.cpp
File metadata and controls
70 lines (66 loc) · 1.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
// Problem 898C Codeforces
#include <iostream>
#include <map>
#include <vector>
#include <algorithm>
#include <stdio.h>
using namespace std;
map <string, vector<string> > m;
map <string, vector<string> > :: iterator it;
int bang(string st1, string st2){
if (st1.length()==st2.length() && st1!=st2){
return -1;
}
else{
if (st1.length()>=st2.length() && st1.substr(st1.length()-st2.length(), st2.length())==st2)
return 1;
if(st2.length()>=st1.length() && st2.substr(st2.length()-st1.length(), st1.length())==st1)
return 1;
return -1;
}
}
int main(){
string st, st1;
int k,n;
//
freopen("input.inp","r",stdin);
cin>>n;
for (int i=1; i<=n; i++){
cin>>st;
cin>>k;
for (int j=1; j<=k; j++){
cin>>st1;
m[st].push_back(st1);
}
}
cout<<m.size()<<endl;
for (it=m.begin(); it!=m.end(); it++){
vector<string> v(it->second);
int f=v.size();
for (int i=0; i<(int)v.size(); i++){
for (int j=0; j<(int)v.size(); j++){
if (bang(v[i], v[j])==1){
if (v[i].length()<v[j].length()){
v[i]=v[j];
}
else{
v[j]=v[i];
}
}
}
}
sort(v.begin(), v.end());
int d=v.size();
for (int i=1; i<(int)v.size(); i++){
if ( v[i]==v[i-1]){
d--;
v[i-1]="";
}
}
cout<<it->first<<" "<<d<<" ";
for (int j=0; j<(int)v.size(); j++)
if (v[j]!="")
cout<<v[j]<<" ";
cout<<endl;
}
}