We use cookies to ensure you have the best browsing experience on our website. Please read our cookie policy for more information about how we use cookies.
#include<iostream>#include<vector>#include<string>usingnamespacestd;classSpell{private:stringscrollName;public:Spell():scrollName(""){}Spell(stringname):scrollName(name){}virtual~Spell(){}stringrevealScrollName(){returnscrollName;}};classFireball:publicSpell{private:intpower;public:Fireball(intpower):power(power){}voidrevealFirepower(){cout<<"Fireball: "<<power<<endl;}};classFrostbite:publicSpell{private:intpower;public:Frostbite(intpower):power(power){}voidrevealFrostpower(){cout<<"Frostbite: "<<power<<endl;}};classThunderstorm:publicSpell{private:intpower;public:Thunderstorm(intpower):power(power){}voidrevealThunderpower(){cout<<"Thunderstorm: "<<power<<endl;}};classWaterbolt:publicSpell{private:intpower;public:Waterbolt(intpower):power(power){}voidrevealWaterpower(){cout<<"Waterbolt: "<<power<<endl;}};classSpellJournal{public:staticstringjournal;staticstringread(){returnjournal;}};stringSpellJournal::journal="";voidcounterspell(Spell*spell){/* Enter your code here. Read input from STDIN. Print output to STDOUT */if(dynamic_cast<Fireball*>(spell))dynamic_cast<Fireball*>(spell)->revealFirepower();elseif(dynamic_cast<Frostbite*>(spell))dynamic_cast<Frostbite*>(spell)->revealFrostpower();elseif(dynamic_cast<Thunderstorm*>(spell))dynamic_cast<Thunderstorm*>(spell)->revealThunderpower();elseif(dynamic_cast<Waterbolt*>(spell))dynamic_cast<Waterbolt*>(spell)->revealWaterpower();else{stringspellName=spell->revealScrollName();stringjournalName=SpellJournal::read();vector<int>lcs(journalName.length()+1,0);intholdCurrent=0,prevHold=0;for(intr=0;r<spellName.length();r++){prevHold=lcs.front();for(intc=1;c<lcs.size();c++){holdCurrent=lcs[c];if(spellName[r]==journalName[c-1])lcs[c]=prevHold+1;elselcs[c]=(holdCurrent>lcs[c-1])?holdCurrent:lcs[c-1];prevHold=holdCurrent;}}cout<<lcs.back()<<endl;}}classWizard{public:Spell*cast(){Spell*spell;strings;cin>>s;intpower;cin>>power;if(s=="fire"){spell=newFireball(power);}elseif(s=="frost"){spell=newFrostbite(power);}elseif(s=="water"){spell=newWaterbolt(power);}elseif(s=="thunder"){spell=newThunderstorm(power);}else{spell=newSpell(s);cin>>SpellJournal::journal;}returnspell;}};intmain(){intT;cin>>T;WizardArawn;while(T--){Spell*spell=Arawn.cast();counterspell(spell);}return0;}
Cookie support is required to access HackerRank
Seems like cookies are disabled on this browser, please enable them to open this website
Magic Spells
You are viewing a single comment's thread. Return to all comments →