Pagini recente » Cod sursa (job #1744136) | Cod sursa (job #2725878) | Cod sursa (job #893860) | Cod sursa (job #1996713) | Cod sursa (job #924047)
Cod sursa(job #924047)
#include <fstream>
#include <set>
#include <string>
using namespace std;
ifstream f("trie.in"); ofstream g("trie.out");
const int NMAX = 100009;
char line[32];
set < pair <string, int> > S;
int N, nr[NMAX];
string w;
set < pair <string, int> > :: iterator I;
inline int cmp(string s1, string s2){
int i, l = s1.length(), ll = s2.length();
for(i = 0; i < l && i < ll && s1[i] == s2[i]; ++i);
return i;
}
int main() {
S.insert(make_pair("'''", 0));
while(!f.eof()) {
f.getline(line, 32);
w = string(line + 2);
switch(line[0]) {
case '0' :{
I = S.lower_bound(make_pair(w, 0));
if(I->first == w) nr[I->second] ++;
else {
S.insert(make_pair(w, ++N));
nr[N] = 1;
}
break;
}
case '1' : {
I = S.lower_bound(make_pair(w, 0));
nr[I->second] --;
if(nr[I->second] == 0) S.erase(I);
break;
}
case '2' : {
I = S.lower_bound(make_pair(w, 0));
if(I -> first == w) g << nr[I->second] << '\n';
else g << "0\n";
break;
}
case '3' : {
int v1 = 0, v2 = 0;
I = S.lower_bound(make_pair(w, 0));
v1 = cmp(I->first, w);
if(I != S.begin()) {
--I;
v2 = cmp(I->first, w);
}
g << max(v1, v2) << '\n';
break;
}
}
}
g.close();
return 0;
}