Pagini recente » Cod sursa (job #2748259) | Cod sursa (job #1977632) | Cod sursa (job #532774) | Cod sursa (job #1481272) | Cod sursa (job #722851)
Cod sursa(job #722851)
#include<fstream>
#include<string>
#include<map>
using namespace std;
typedef map<string,int>::iterator imap;
int pre_l(const string &a, const string &b)
{
int i;
for (i=0;i<a.size()&&i<b.size()&&a[i]==b[i];i++);
return i;
}
int com_pre(map<string,int> &M, string &s)
{
imap it=M.upper_bound(s);
imap itp=it; --itp;
if (it==M.begin()) return pre_l(it->first,s);
if (it==M.end()) return pre_l(itp->first,s);
return max(pre_l(it->first,s),pre_l(itp->first,s));
}
int main()
{
ifstream fin("trie.in");
ofstream fout("trie.out");
map<string,int> M;
while (fin.good())
{
int op; string tmp;
fin>>op>>tmp; if (tmp=="") break;
switch (op)
{
case 0:
if (M.find(tmp)==M.end()) M.insert(pair<string,int>(tmp,1));
else M.find(tmp)->second++;
break;
case 1:
if (M.find(tmp)->second==1) M.erase(M.find(tmp));
else M.find(tmp)->second--;
break;
case 2:
if (M.find(tmp)==M.end()) fout<<"0\n";
else fout<<M.find(tmp)->second<<'\n';
break;
case 3:
fout<<com_pre(M, tmp)<<'\n';
}
}
return 0;
}