Cod sursa(job #661224)

Utilizator d.andreiDiaconeasa Andrei d.andrei Data 14 ianuarie 2012 00:39:14
Problema Trie Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <cstdio>
#include <fstream>
#include <iostream>
#include <map>
#include <string>
#include <algorithm>

using namespace std;

#define file_in "trie.in"
#define file_out "trie.out"

string cuv;
map<string,int> dic;
int tip,i;

int main(){
	
	ifstream f(file_in);
	ofstream g(file_out);
	
	while(f>>tip>>cuv){
		
		if (tip==0)
			 dic[cuv]++;
		else
		if (tip==1){
            map<string,int> :: iterator it;
			for (it=dic.begin();it!=dic.end();++it)
				 if ((*it).first==cuv){
				 (*it).second--;
				 if ((*it).second==0)
					 dic.erase(it);
				 break;
				 }
					
		}
        else
		if (tip==2){
			int find=0;
			map<string,int> :: iterator it;
			for (it=dic.begin();it!=dic.end();++it)
				 if ((*it).first==cuv){
					 g<<(*it).second<<"\n";
				 find=1;
					 break;
				 }
				 if (!find)
					 g<<find<<"\n";
		}
		else{
			int lcp=0;
			map<string,int> :: iterator it;
			for (it=dic.begin();it!=dic.end();++it){
					 string s1=(*it).first;
					 string s2=cuv;
					 i=0;
					 while(s1[i]==s2[i]){ 
						 if (i>=s1.size()) break;
						 if (i>=s2.size()) break;
						 i++;
					 }
					 lcp=max(lcp,i);
				 }
				 g<<lcp<<"\n";
		}
	}
	
	return 0;
}