Pagini recente » Cod sursa (job #2611372) | Cod sursa (job #325147) | Cod sursa (job #1933754) | Cod sursa (job #1877606) | Cod sursa (job #922946)
Cod sursa(job #922946)
#include <fstream>
#include <list>
#include <string>
using namespace std;
ifstream f("trie.in"); ofstream g("trie.out");
const int NMAX = 30;
char line[NMAX];
list <string> L;
list <string> :: iterator it;
inline void erase(char *s) {
string t(s);
for(it = L.begin(); it != L.end(); ++it)
if(*it == t) {
L.erase(it);
break;
}
}
inline int count(char *s) {
string t(s);
int cnt = 0;
for(it = L.begin(); it != L.end(); ++it)
if(*it == t) ++cnt;
return cnt;
}
inline int pre(char *s) {
string t(s), tt;
int l1, l2, len = 0;
l1 = t.length() - 1;
for(it = L.begin(); it != L.end(); ++it) {
tt = *it, l2 = tt.length() - 1;
int i;
for(i = 0; i <= l1 && i <= l2 && t[i] == tt[i]; ++i);
len = len < i ? i : len;
}
return len;
}
int main() {
while(!f.eof()) {
f.getline(line, NMAX);
switch(line[0]) {
case '0' : { L.push_back(line + 2); break; }
case '1' : { erase(line + 2); break; }
case '2' : { g << count(line + 2) << '\n'; break; }
case '3' : { g << pre(line + 2) << '\n'; break; }
}
}
g.close();
return 0;
}