рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рд╡рд░реНрдЧреАрдХрд░рдгред рднрд╛рдЧ рддреАрди: рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЛ рд╕рд╣реА рдХрд░рдирд╛

рдЯрд╛рдЗрдкреЛрд╕ рдХрднреА-рдХрднреА рдкрд╛рдардХ рдХреЗ рдордиреЛрд░рдВрдЬрди рдореЗрдВ рд╕рд╣рд╛рдпрдХ рд╣реЛрддреЗ рд╣реИрдВред рдЦреЛрдЬ рдЗрдВрдЬрди рдЕрднреА рддрдХ рд╣рд╛рд╕реНрдп рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рд╢рдмреНрдж рдЙрдиреНрд╣реЗрдВ рднреНрд░рдо рдореЗрдВ рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкрд░реЗрд╢рд╛рди рдХрд░рддрд╛ рд╣реИред рдЗрди рдШрдЯрдирд╛рдУрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдЯрд╛рдЗрдкреЛрд╕ рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд "рд╕реБрдзрд╛рд░рдХ" рд╣реЛрддреЗ рд╣реИрдВ, рд╡реЗ рд╡рд░реНрддрдиреА рдЬрд╛рдВрдЪрдХ рднреА рд╣реЛрддреЗ рд╣реИрдВред

рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЛ рд╕рд╣реА рдХрд░рдиреЗ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рдХреБрдЫ рд▓рд┐рдЦрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рд╡рд╣ рдирд╣реАрдВ рджреЛрд╣рд░рд╛рдКрдВрдЧрд╛ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬреНрдЮрд╛рдд рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рд╕реНрдХреНрд░реИрдЪ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛ рдЦрд░реЛрдВрдЪ рд╕реЗ рдХреИрд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рдП - рд╕рд░рд▓, рд▓реЗрдХрд┐рди рдХрд╛рдлреА рд╕рдХреНрд╖рдоред рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рд╕рд╣реА рд╢рдмреНрджреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдФрд░ рд╕реА ++ рдХрд╛ рдПрдХ рд╕рд╛ рд╣реИред





рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рд╢рдмреНрджреЛрдВ рдХреА рд╕реВрдЪреА рд▓реА, рд▓реЗрдХрд┐рди рдХреЛрдИ рднреА рдЕрдиреНрдп рд╢рдмреНрджрдХреЛрд╢ рдХрд░реЗрдЧрд╛ред рд╣рдо рдЗрд╕реЗ рдПрдХ рдЙрдкрд╕рд░реНрдЧ рд╡реГрдХреНрд╖ (рдЙрд░реНрдл рдЯреНрд░рд╛рдЗ) рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗред рдпрд╣рд╛рдБ рдЗрд╕рдХреА рдХреБрдЫ рд╣рдж рддрдХ рд╡рд┐рджреЗрд╢реА рд╣реИ , рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЗрд╖реНрдЯрддрдо рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЦрддрд░рдирд╛рдХ рд╣реИ , рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:

struct trie_t: map<char, trie_t> { } 

trie_t рд╕рдВрд░рдЪрдирд╛ рд╕рднреА map рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рд╣реИред рдЗрд╕ map рдХреА рдХреБрдВрдЬрд┐рдпреЛрдВ рдореЗрдВ рд╢рдмреНрджреЛрдВ рдХреЗ рдЕрдХреНрд╖рд░ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ, рдФрд░ рдорд╛рди рдлрд┐рд░ рд╕реЗ trie_t рд╕рдВрд░рдЪрдирд╛рдПрдВ рд╣реИрдВ рдЬреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ trie_t ... рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдереЛрдбрд╝рд╛ рдзреНрдпрд╛рди рд╕реЗ, рд▓реЗрдХрд┐рди рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд░реЗрдЧрд╛ред

рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдиреЛрдб рдХрд╛ рд╡рдЬрди рдЬреЛрдбрд╝реЗрдВ, рдпрд╣ рдмрд╛рдж рдореЗрдВ рдХрд╛рдо рдореЗрдВ рдЖрдПрдЧрд╛:

 struct trie_t: map< char, trie_t > { size_t w; trie_t() : w(0) {} } 

рд╣рдо рдЗрд╕ рдлрдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреЗрдбрд╝реЛрдВ рдореЗрдВ рд╢рдмреНрдж рд▓рд┐рдЦреЗрдВрдЧреЗ:

 trie_t & add( trie_t & t, const string & s ) { t.w++; return !s.empty() ? add( t[ s[0] ], s.substr(1) ) : t['$']; } 

рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рд╣рдо рд╢рдмреНрдж рдХреЗ рдкрд╣рд▓реЗ рдЪрд░рд┐рддреНрд░ рдХреЛ рд▓реЗрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдорд╛рдирдЪрд┐рддреНрд░ рдХреБрдВрдЬреА рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдмрдЯреНрд░реА рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдорд┐рд▓рддрд╛ рд╣реИ (рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЗрд╕реЗ рддреБрд░рдВрдд рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдЗрд╕ рд░реЗрдЦрд╛ рдореЗрдВ рд╢реЗрд╖ рд░реЗрдЦрд╛ рдХреЛ рдкреБрди: рд▓рд┐рдЦреЗрдВред рдЬрдм рд▓рд╛рдЗрди рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рдЕрдВрддрд┐рдо рдиреЛрдб рдореЗрдВ рдПрдХ "рд╕реНрдЯреЙрдк рд╕рд╛рдЗрди" - рдПрдХ рдЦрд╛рд▓реА рд╕рдмрдЯреНрд░реА рдХреЗ рд╕рд╛рде рдХреБрдВрдЬреА ' $ ' рдЬреЛрдбрд╝реЗрдВред

рджрд┐рдП рдЧрдП рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╢рдмреНрджреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЙрди рд╕рднреА рдХреЛ рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рджрд░реНрдЬ рдХрд░реЗрдВрдЧреЗ:

 trie_t glossary; ifstream fi( argv[1] ); string word; while( getline( fi, word ) ) add( glossary, word ); 

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдкреЗрдбрд╝ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдХреЗ w рдХреНрд╖реЗрддреНрд░ рдореЗрдВ, рдЗрд╕ рдиреЛрдб рд╕реЗ рдЧреБрдЬрд░рдиреЗ рд╡рд╛рд▓реЗ рд╢рдмреНрджреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рджрд░реНрдЬ рдХреА рдЬрд╛рдПрдЧреАред

рдЗрд╕ рд╕рдм рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдЖрдк рдкреЗрдбрд╝ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд┐рдП рдЧрдП рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХреЗ рд╕рд╛рде рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдХреА рдХреБрдВрдЬрд┐рдпреЛрдВ рдФрд░ рдЙрдкрдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЫрд╛рдБрдЯ рд╕рдХрддреЗ рд╣реИрдВ:

 void print( const trie_t & t, const string & prefix = "" ) { for( map<char, trie_t>::const_iterator it = t.begin(); it != t.end(); ++it ) if ( it->first == '$' ) cout << prefix << endl; else print( it->second, prefix + it->first ); } 

рдЖрдк рдкреЗрдбрд╝ рдореЗрдВ рджрд┐рдП рдЧрдП рд╢рдмреНрдж рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдпрд╛ рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 bool is_known( trie_t & t, const string & s ) { return !s.empty() ? is_known( t[ s[0] ], s.substr(1) ) : t.find('$') != t.end(); } 

рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рддреНрд░реБрдЯрд┐ рдмрдирд╛рдИ рдЧрдИ рд╣реИред рдореИрдВ рдЗрд╕реЗ рд╕рд╣реА рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА "рд╕реНрдкрд╖реНрдЯ" рдЦреЛрдЬ рдЕрдм рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реЛрдЧреАред

рдлрдЬреА рдЦреЛрдЬ


рдпрджрд┐ рдЖрдк рдПрдХ рдкреЗрдбрд╝ рдХреЛ рдХрдИ рддрд░рд╣ рдХреА рдХрд╛рдВрдЯреЗрджрд╛рд░ рд╕рдбрд╝рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд▓реНрдкрдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╢рдмреНрдж рдЦреЛрдЬ рдлрд╝рдВрдХреНрд╢рди рдЗрд╕ рд╕рдбрд╝рдХ рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдпрд╛рддреНрд░реА рд╣реИред рдпрд╛рддреНрд░реА рдХреЛ рдПрдХ рдорд╛рд░реНрдЧ (рдЦреЛрдЬ рд╢рдмреНрдж) рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЙрд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╡рд╣ рдиреЛрдб рд╕реЗ рдиреЛрдб рддрдХ рдЬрд╛рддрд╛ рд╣реИ, рдкрд╛рд╕ рдХрд┐рдП рдЧрдП рдорд╛рд░реНрдЧ рдХреЗ рдЕрдХреНрд╖рд░реЛрдВ рдХреЛ рдкрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдкрддреНрд░ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдП рд╣реИрдВ, рддреЛ рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рдмрд╛рдХреА рд╣реИ рдХрд┐ "рд╕реНрдЯреЙрдк рд╕рд╛рдЗрди" рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред

рдЕрдм рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рдПрдХ рдпрд╛рддреНрд░реА, рдЬреИрд╕рд╛ рдХрд┐ рд╡рд╣ рдерд╛, рдПрдХ рд╕рд╛рде рд╕рднреА рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ рдПрдХ рд╕рд╛рде рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рдВрдЯрд╛ рдкрд░ рдЙрд╕рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд▓реЛрди рдмрд┐рд▓реНрдХреБрд▓ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реА рддрд░рд╣, рдЬрдм рддрдХ рдХрд┐ рдХреЛрдИ рдЕрдВрддрд┐рдо рд╕реНрдЯреЙрдк (рдпрд╛рдиреА рдкреЗрдбрд╝ рдХреА рдкрддреНрддрд┐рдпрд╛рдВ) рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд░ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИред рдпрд╛рддреНрд░рд┐рдпреЛрдВ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рдкреЗрдбрд╝ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╢рдмреНрджреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧреА, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкреНрд░рдХреНрд╖реЗрдкрд╡рдХреНрд░ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдЧрд╛ред

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЙрди рд╕рднреА рдХреЛ рд╢реБрд░реВ рдореЗрдВ рдПрдХ рд╣реА рд╢рдмреНрдж-рдорд╛рд░реНрдЧ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдХреНрд░рдордг рдХреЗ рд╕рдордп, рдкреНрд░рддреНрдпреЗрдХ рдпрд╛рддреНрд░реА, рдкрд╣рд▓реЗ рдХреА рддрд░рд╣, рдорд╛рд░реНрдЧ рдХреА рдЕрдкрдиреА рдкреНрд░рддрд┐ рдореЗрдВ рдПрдХ рдЕрдХреНрд╖рд░ рдХреЛ рдкрд╛рд░ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрджрд┐ рд╕рдВрдХреНрд░рдордг рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджрд┐рд╢рд╛ рдкрд╛рд░ рдХрд┐рдП рдЧрдП рдкрддреНрд░ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреА рд╣реИ, рддреЛ рдпрд╛рддреНрд░реА рдХреЛ рдЬреБрд░реНрдорд╛рдирд╛ рдорд┐рд▓рддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдпрд╛рддреНрд░рд╛ рдХреЗ рдЕрдВрдд рдореЗрдВ, рд╕рднреА рдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдХрд░реНрдЬ рд╣реЛрдЧрд╛ред рд╣рдо рдЗрд╕ рдорд╛рди рдХреЛ рдмрдврд╝рд╛рддреЗ рд╣реБрдП, рд╕рднреА рдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдпрджрд┐ рдЦреЛрдЬ рд╢рдмреНрдж рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рдореМрдЬреВрдж рд╣реИ, рддреЛ рдПрдХ рдпрд╛рддреНрд░реА рдмрд┐рдирд╛ рдХрд┐рд╕реА рджрдВрдб рдХреЗ рд╕рднреА рддрд░рд╣ рд╕реЗ рдЬрд╛рдПрдЧрд╛ - рд╡рд╣ рд╕реЙрд░реНрдЯ рдХреА рдЧрдИ рд╕реВрдЪреА рдореЗрдВ рдкрд╣рд▓рд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рд╢рдмреНрдж рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рддреЛ рдиреЗрддрд╛ рд╡рд╣реА рд╣реЛрдЧрд╛ рдЬреЛ рдиреНрдпреВрдирддрдо рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЙрд▓реНрд▓рдВрдШрдиреЛрдВ рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рд╣реИред

рджрд░рдЕрд╕рд▓, рдпрд╣ рд▓рдЧрднрдЧ рдкреВрд░рд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╣реИред рдЪрд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдиреЗрддрд╛ рджреНрд╡рд╛рд░рд╛ рдпрд╛рддреНрд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдорд╛рд░реНрдЧ рджрд┐рдП рдЧрдП рд╢рдмреНрдж (рдпрд╛ рд╢рдмреНрдж рд╣реА рд╣реИ, рдЕрдЧрд░ рдХреЛрдИ рдЯрд╛рдЗрдкреЛ рдирд╣реАрдВ рд╣реИрдВ) рдХрд╛ рдирд┐рдХрдЯрддрдо рд╕реБрдзрд╛рд░ рд╣реЛрдЧрд╛, рдФрд░ рдЙрд▓реНрд▓рдВрдШрди рдХреА рд╕рдВрдЦреНрдпрд╛ (рджрд┐рдП рдЧрдП рдорд╛рд░реНрдЧ рд╕реЗ рд╡рд┐рдЪрд▓рди) - рдЯрд╛рдЗрдкреЛ рдХреА рд╕рдВрдЦреНрдпрд╛ред

рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП


рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рд╣реА рд╣реЛрдЧрд╛, рд╕рдбрд╝рдХ рдХреЛ рдПрдХ рдкреЗрдбрд╝ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП, рдиреЛрдбреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдВрдЯреЗ, рдпрд╛рддреНрд░рд┐рдпреЛрдВ рдХреЛ рдкрд░рд┐рдХрд▓реНрдкрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рдФрд░ рд╕рдВрдкрд╛рджрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рд░реНрдЧ рд╕реЗ рд╡рд┐рдЪрд▓рдиред рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рд╡реИрд╕реЗ рд╣реА рд░рд╣рдиреЗ рджреЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдХрд┐рд╕реА рддрд░рд╣ рдЬреАрд╡рд┐рдд рд╣реИрдВред рд╣рдо рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдкреЗрд╢ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдпрд╛рддреНрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреА рд╣реИ:

 struct rambler_t { string todo; string done; size_t cost; const trie_t * road; rambler_t( const string & t, const string & d, const size_t c, const trie_t * r ) : todo( t ), done( d ), cost( c ), road( r ) {} }; 

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

рддреЛ, рдпрд╛рддреНрд░реА рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рдкрд░ рд╣реИ, рдЖрдк рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ:

 rambler_t R( word, "", 0, &glossary ); 


рдкрд╣рд▓рд╛ рдХрджрдо


рд╢рдмреНрджрдХреЛрд╢ рдкреНрд░рд┐рдВрдЯ рдХрд░рддреЗ рд╕рдордп рдкрд╣рд▓реЗ рд╕реЗ рдЙрдкрдпреЛрдЧреА рдЙрдкрдпреЛрдЧреА рд╕рднреА рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдЫрд╛рдБрдЯрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 for( map<char, trie_t>::const_iterator it = R.road->begin(); it != R.road->end(); ++it ) { char dest = it->first; //   const trie_t * road = it->second; //   //     } 

рдЪрд░рдг рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╕рдВрд░рдЪрдирд╛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдореВрд▓реНрдп рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдмрджрд▓ рдЬрд╛рдПрдВрдЧреЗ:

 R.done = R.done + dest; R.todo = R.todo.substr(1); R.road = R.road[ dest ]; 

рдХрд┐рд░рд╛рдпрд╛ рднреБрдЧрддрд╛рди рдХреЗ рд╕рд╛рде, рджреЛ рд╡рд┐рдХрд▓реНрдк рд╕рдВрднрд╡ рд╣реИрдВред рдпрджрд┐ рдЪрдпрдирд┐рдд рджрд┐рд╢рд╛ "рд╕рд╛рдорд╛рдиреНрдп рд░реЗрдЦрд╛" рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ, рддреЛ рд╕рдВрдХреНрд░рдордг рдореБрдХреНрдд рд╣реИ, рдЕрдиреНрдпрдерд╛ +1:

 R.cost = R.cost + ( dest == todo[0] ? 0 : 1 ); 

рдареАрдХ рд╣реИ, рдкрд╣рд▓рд╛ рдХрджрдо рдЙрдард╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдХрд╣рдирд╛ рдЕрдзрд┐рдХ рд╕рд╣реА рд╣реИ рдХрд┐ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рдХрдИ рдкрд╣рд▓реЗ рдЪрд░рдг рд╣реЛрддреЗ рд╣реИрдВ - рдПрдХ рдЕрдХреЗрд▓рд╛ рдкрдерд┐рдХ рдХреЗ рдмрдЬрд╛рдп, рдПрдХ рдкреВрд░реА рдЯреАрдо рджрд┐рдЦрд╛рдИ рджреА:

 typedef vector<rambler_t> team_t; 

рдпрд╣ рдХреЗрд╡рд▓ рдХрджрдо рд╕реЗ рдХрджрдо рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ, рдЯреАрдо рдХреЛ рддрдм рддрдХ рдмрдврд╝рд╛рддреА рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рд╣рд░ рдХреЛрдИ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдмрд╛рдд рдкрд░ рдирд╣реАрдВ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ ... рд╕реНрдЯреЙрдкред рдПрдХ рдЕрддрд┐рд╢рдпрддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдирд╣реАрдВред

рдКрдкрд░ рд╡рд░реНрдгрд┐рдд "рдЧрд▓рдд рдореЛрдбрд╝", рджреВрд╕рд░реЗ рдЕрдХреНрд╖рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╢рдмреНрдж рдХреЗ рдПрдХ рдЕрдХреНрд╖рд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реА рдкреНрд░рдХрд╛рд░, рдЯрд╛рдЗрдкреЛ рдХреА рдХрд┐рд╕реНрдореЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдХрдо рд╕реЗ рдХрдо рджреЛ рдФрд░ рд╣реИрдВ: рд╣рдЯрд╛рдПрдВ рдФрд░ рдбрд╛рд▓реЗрдВред

рдирд┐рд╖реНрдХрд╛рд╕рди


рдпрд╣ рд╕реНрдерд┐рддрд┐ "рднреБрдЧрддрд╛рди рдХреА рдЧрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдЪрд▓реА рдирд╣реАрдВ рдЧрдИ": рд╣рдо рдкрд╣рд▓реЗ рдкрддреНрд░ рдХреЛ todo рд╕реЗ рд╣рдЯрд╛рддреЗ рд╣реИрдВ, рд╣рдо рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдареАрдХ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

 R.done = R.done; R.todo = R.todo.substr(1); R.road = R.road; R.cost = R.cost + 1; 

рдирддреАрдЬрддрди, todo рд╕реЗ рдкрддреНрд░ рдмрд╕ рд░рд╛рд╕реНрддреЗ рд╕реЗ рдЦреЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред

рдбрд╛рд▓рдиреЗ


рдпрд╣рд╛рдВ, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, "рдЬрдЧрд╣ рдореЗрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИ": рд╣рдо рдкреЗрдбрд╝ рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВ, рдХрд┐рдП рдЧрдП рдкрддреНрд░ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди todo рд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣рдЯрд╛рддреЗ рд╣реИрдВред

 R.done = R.done + dest; R.todo = R.todo; R.road = R.road[ dest ]; R.cost = R.cost + 1; 

рдкреВрд░реНрдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкрддреНрд░ рдпреЛрдЬрдирд╛ рд╕реЗ рдмрд╛рд╣рд░ рдХрд╣реАрдВ рдирд╣реАрдВ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕реЗ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред

рдкрд┐рддрд╛ рдФрд░ рдмрдЪреНрдЪреЗ


рдЪреВрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдореЗрдВ рджреБрдирд┐рдпрд╛ рдХреЗ рдХреБрдЫ рд╕рдорд╛рдирд╛рдВрддрд░рдХрд░рдг рд╣реЛрддреЗ рд╣реИрдВ, рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рд╣реЛрддреА рд╣реИ, рд╣рдо рдпрд╛рддреНрд░реА рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЙрдирдХреА рдЫрд╡рд┐ рдФрд░ рд╕рдорд╛рдирддрд╛ рдореЗрдВ рдирдП рд▓реЛрдЧреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВрдЧреЗред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╝рдВрдХреНрд╢рди рд╕рдм рдХреБрдЫ рдПрдХрдЬреБрдЯ рдХрд░рддрд╛ рд╣реИ: рдпрд╣ рдЗрдирдкреБрдЯ рдкрд░ рдПрдХ рдпрд╛рддреНрд░реА рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рджрд┐рдП рдЧрдП рдорд╛рд░реНрдЧ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдпрд╛рддреНрд░рд┐рдпреЛрдВ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рджреЛ рд╡реИрдХреНрдЯрд░ рдореЗрдВ рднрд░рддрд╛ рд╣реИ, рдЯреНрд░реА рдиреЛрдб рдХреА рдХреБрдВрдЬреА рдФрд░ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдирд┐рдпрдоред
team рд╡реЗрдХреНрдЯрд░ рдореЗрдВ рд╡реЗ рд▓реЛрдЧ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рдЖрдЧреЗ рдмрдврд╝рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗ, рдФрд░ рдЬреЛ finished рдЧрдП рд╣реИрдВ рд╡реЗ рд╡реЗрдХреНрдЯрд░ рдореЗрдВ finished , рдЕрд░реНрдерд╛рдд, рдЬрд┐рдирдХреЗ todo рдЦрд╛рд▓реА рд╣реИрдВ рдФрд░ рд╡рд░реНрддрдорд╛рди рдЯреНрд░реА рдиреЛрдб рдореЗрдВ рд╢рдмреНрдж рдХреЗ рдЕрдВрдд рдореЗрдВ рдЕрдВрдХрди рд╣реИрдВред

 void step_forward( const rambler_t & R, team_t & team, team_t & finished ) { char next = R.todo[0]; //  const string & todo = next ? R.todo.substr(1) : ""; for( map<char, trie_t>::const_iterator it = R.road->begin(); it != R.road->end(); ++it ) { const trie_t * road = &it->second; //  char dest = it->first; //  if ( next == dest ) team.push_back( rambler_t( todo, //    R.done + dest, R.cost, road )); else { team.push_back( rambler_t( todo, //  R.done + dest, R.cost + 1, road )); team.push_back( rambler_t( R.todo, //  R.done + dest, R.cost + 1, road )); if ( !next && dest == '$' ) finished.push_back( R ); // ! } } if ( next ) team.push_back( rambler_t( todo, //  R.done, R.cost + 1, R.road )); } 


рдкреНрд░рд╛рдХреГрддрд┐рдХ рдЪрдпрди


рдФрд░ рджреВрд╕рд░реА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ: рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдирдП рдФрд░ рдирдП рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдореЗрдВ рд╣рд┐рдорд╕реНрдЦрд▓рди рдЬреИрд╕рд╛ рдЙрддреНрдкрд╛рджрди, рд╣рдо рддрд░реНрдХрд╣реАрди рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВред рдкреЗрдбрд╝ рдкрд░ рдШреВрдордиреЗ рд╡рд╛рд▓реА рднреАрдбрд╝ рдЦрд░рд╛рдм рддрд░реАрдХреЗ рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реЛрддреА рд╣реИ, рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рд╡реЗ рдмреЗрдХрд╛рд░ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ рд╡реНрдпрд░реНрде рдореЗрдВ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЦрд╛ рдЬрд╛рддреЗ рд╣реИрдВред рд╣рдо рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд░рддреЗ рд╣реИрдВ - рдЙрдиреНрд╣реЗрдВ рдЪрд▓рдиреЗ рджреЗрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЬреБрд░реНрдорд╛рдирд╛ рдХреА рдЕрдзрд┐рдХрддрдо рд╕реНрд╡реАрдХрд╛рд░реНрдп рд░рд╛рд╢рд┐ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВрдЧреЗ, рдФрд░ рд╣рдо рд╣рд░ рдХрд┐рд╕реА рдХреЛ рдлреЗрдВрдХ рджреЗрдВрдЧреЗ рдЬреЛ рдЗрд╕реЗ рдкрд╛рд░ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ, рджрд┐рдП рдЧрдП рд░рд╛рд╕реНрддреЗ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИрдВред

рджреВрд╕рд░реЗ, рд╣рдо рдЙрди рд╕рднреА рдкрд┐рдЫрдбрд╝реЛрдВ рдХреЛ рджреВрд░ рд╕реЗ рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗред рд╕рдЪ рд╣реИ, рдПрдХ рдЬреЛрдЦрд┐рдо рд╣реИ рдХрд┐ рдирд┐рд╖реНрдХрд╛рд╕рд┐рдд рдмрд╛рд╣рд░реА рд▓реЛрдЧреЛрдВ рдХреЗ рдмреАрдЪ, рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рджреМрдбрд╝ рдХреЗ рдмрд╣реБрдд рдЕрдВрдд рдореЗрдВ рдиреЗрддрд╛рдУрдВ рд╕реЗ рдЖрдЧреЗ рдирд┐рдХрд▓ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдЦрдбрд╝рд╛ рд╣реЛрдирд╛ рд╣реЛрдЧрд╛ред

рдЬреЛ рд▓реЛрдЧ рдкрд┐рдЫрдбрд╝ рд░рд╣реЗ рд╣реИрдВ, рдЙрдирдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рднреА рдХреЗ рд╕рдлрд▓ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдПрдВрдЧреЗ, рдЕрд░реНрдерд╛рдд, рд╢реЗрд╖ рд░рд╛рд╢рд┐ рдЕрдзрд┐рдХрддрдо рд░рд╛рд╢рд┐ рд╕реЗ рдЕрдзрд┐рдХ рдХреЗ рд▓рд┐рдП рдЕрдпреЛрдЧреНрдпрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдХрд╡рд░ рдХреА рдЬрд╛рдПрдЧреАред рдореМрдХрд╛ рдХрд╛ рдЕрдиреБрдорд╛рди рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛:

 double ramb_chances( const rambler_t & a ) { return log( ( a.road->w + 1 ) * ( a.done.size() + 1 ) ) / ( 1 << a.cost ); } 

рдПрдХ рд▓рдШреБрдЧрдгрдХ рдХреНрдпреЛрдВ рд╣реИ? рдХрд┐рд╕ рддрд░рд╣ рдХреА рдмрд┐рдЯреНрд╕ рд╢рд┐рдлреНрдЯ? рдХрд╛рд░реНрдп рдЗрд╕ рддрд░рд╣ рдХреНрдпреЛрдВ рд╣реИ? рдЖрдк рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд┐рддрдиреЗ рдЕрдзрд┐рдХ рдЬреБрд░реНрдорд╛рдиреЗ рдорд┐рд▓реЗ, рдЙрддрдиреЗ рдХрдо рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдФрд░ рдЙрдкрд╢реАрд░реНрд╖рдХ рдореЗрдВ рдЬрд┐рддрдиреЗ рдЕрдзрд┐рдХ рд╢рдмреНрдж рд╣реИрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдЙрдкрдпреБрдХреНрдд рд╢рдмреНрдж рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдЕрдзрд┐рдХ рд╣реИред рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдпрд╛рддреНрд░рд╛ рдкрде рдХреА рд▓рдВрдмрд╛рдИ, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдерд╛, "рдзреАрд░рдЬ" рдХреА рдЧрд╡рд╛рд╣реА рджреЗрддрд╛ рд╣реИред

рдореБрдЭреЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдмрд╛рдж рд╡рд╛рд▓рд╛ рдмрд╣реБрдд рдХреНрд░реВрд░ рд╣реИред рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рдЕрдиреБрдорд╛рди рдореЗрдВ, рдореБрдЦреНрдп рдмрд╛рдд рдХрд╛рдо рдХрд░рдирд╛ рд╣реИред рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдФрд░, рдПрдХ рд░рд╛рд╕реНрддрд╛ рдпрд╛ рдХреЛрдИ рдЕрдиреНрдп, рд╣рдо рдкреВрд░рд╛ рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рдЕрдзрд┐рдХрддрдо рд░рд╛рд╢рд┐ рдЬреБрд░реНрдорд╛рдирд╛ рдХреЛ max_cost рд░реВрдк рдореЗрдВ max_cost , рдЯреАрдо рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдзрд┐рдХрддрдо рдЯреАрдо рдХрд╛ рдЖрдХрд╛рд░ред

рд╕рднреА рд╕рдбрд╝рдХреЛрдВ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЕрдЧреНрд░рдгреА рд░рдЦреЗрдВ:

 team_t walkers, leads; walkers.push_back( rambler_t( word, "", 0, &glossary ) ); 

рд╣рдо рдПрдХ рдХрджрдо рдЙрдард╛рддреЗ рд╣реИрдВ, рдЕрдЧрд▓реА "рдкреАрдврд╝реА" рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ:

 team_t next_g; for( size_t i = 0; i < walkers.size(); ++i ) step_forward( walkers[i], next_g, leads ); 

leads рд▓реЛрдЧреЛрдВ рдиреЗ рдЕрдкрдирд╛ рд░рд╛рд╕реНрддрд╛ рдкреВрд░рд╛ рдХрд░ рд▓рд┐рдпрд╛ leads , next_g leads рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдЕрднреА рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪреЗ рд╣реИрдВ, next_g рдореЗрдВ next_g ред рд╣рдо рдЙрдирдХреЗ рдЕрднреА рддрдХ рдирд╣реАрдВ рдЙрддрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреА рддрд░рд╣ рд╣реИ:

 sort( next_g.begin(), next_g.end(), ramb_chance_cmp ); 

рдФрд░ рд╣рдо рдпрд╣ рд╕рдм рддрдм рддрдХ рджреЛрд╣рд░рд╛рддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рдХреЛрдИ рдЖрдЧреЗ рдмрдврд╝рдирд╛ рдмрд╛рдХреА рд╣реИред рд╣рдо рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдирдЬрд╝рд░рдЕрдВрджрд╛рдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рдкреЗрдирд▓реНрдЯреА max_cost рдЕрдзрд┐рдХ max_cost , рдФрд░ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда team_size рдкреНрд░рд╡реЗрд╢ рдирд╣реАрдВ рдХрд┐рдпрд╛:

 while ( !walkers.empty() ) { team_t next_g; for( size_t i = 0; i < min( walkers.size(), team_size ); ++i ) if ( walkers[i].cost < max_cost ) step_forward( walkers[i], next_g, leads ); walkers.swap( next_g ); sort( walkers.begin(), walkers.end(), ramb_chance_cmp ); } 

рд╡реИрд╕реЗ, leads рдореЗрдВ рдПрдХ рд╣реА done рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╕рд╛рде рдХрдИ рд╕рдВрд░рдЪрдирд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдХрд╣рд╛рдБ рд╕реЗ рдЖрддреЗ рд╣реИрдВ?
рд╣рдо рдХреЗрд╡рд▓ рдЕрдирдиреНрдп рддрддреНрд╡ рдЫреЛрдбрд╝реЗрдВрдЧреЗ:

 sort( leads.begin(), leads.end(), ramb_done_cmp ); //   done leads.resize( distance( leads.begin(), unique( leads.begin(), leads.end(), ramb_uniq ) ) ); //   sort( leads.begin(), leads.end(), ramb_chance_cmp ); //   

рдпрд╣ рд▓рдЧрднрдЧ рд╕рднреА рд╣реИред

рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдХреЛ spellcheck рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ, рд╣рдорд╛рд░реЗ рд╢рдмреНрдж рдХреЛ рдЗрд╕рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗрдВ, рдЕрдзрд┐рдХрддрдо рдЬреБрд░реНрдорд╛рдирд╛ рдФрд░ рдЙрдореНрдореАрджрд╡рд╛рд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ред рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 while( getline( cin, word ) ) { team_t fixed = spellcheck( word, word.size()/2, 512 ); cout << word << endl; for( size_t i = 0; i < fixed.size(); ++i ) cout << '\t' << fixed[i].done << ' ' << fixed[i].cost << endl; cout << endl; } 

512 рдЙрдореНрдореАрджрд╡рд╛рд░реЛрдВ рдХреА рд╕реАрдорд╛ рдФрд░ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рд╢рдмреНрдж рдХреА рдЖрдзреА рд▓рдВрдмрд╛рдИ рдХрд╛ рдЕрдзрд┐рдХрддрдо рд╡рд┐рдЪрд▓рди рдЬреЛ рдореИрдВрдиреЗ рд╕реНрд╡рдпрдВ рдЙрдард╛рдпрд╛ рдерд╛ред рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде, рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рд▓рдЧрднрдЧ 10 рд╢рдмреНрдж рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рд╣реИ, рдпрд╣ , , рдФрд░ рд╢рдмреНрджреЛрдВ рдХреЗ рд╕рд╛рде рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛ рдореЗрдВ рдирд╣реАрдВ ред

рдЕрдм рдмрд╕ рдЗрддрдирд╛ рд╣реАред рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдпрд╣рд╛рдБ рдЯрд╛рдЗрдкреЛ рдХреЛ рд╕рд╣реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рд╕рд░рд▓ рд▓реЗрдХрд┐рди рдкреНрд░рднрд╛рд╡реА рддрдВрддреНрд░ рдХреЗ рдХрд╛рдо рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

   2    3   3   3   2  2  2 


рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЙрд╕рдХреЗ рд╕рднреА рдкрд░рд┐рдгрд╛рдо рд╕рд╣реА рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд╣реИред

рдпрд╛рддреНрд░рд╛ рдХреЗ рдкрд░рд┐рдгрд╛рдо


рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧреЛрдВ рдиреЗ рд╕реВрдЪрд┐рдд рдЦреЛрдЬ рдХреА рдХрд┐рд╕реНрдореЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рд╕реАрдЦрд╛ рд╣реИ - рдП * рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо , рдпрд╛ рдмрд▓реНрдХрд┐, рдЗрд╕рдХреА рднрд┐рдиреНрдирддрд╛ - рдП * рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд╕рд╛рде рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдЧрд╣рд░реАрдХрд░рдг рдФрд░ рд╕реНрдореГрддрд┐ рд╕реАрдорд╛ред рдмреЗрд╢рдХ, рд╡рд░реНрдгрд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗрд╡рд▓ рдкрд╣рд▓рд╛ рд╣реИ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рдбрд╝рд╛рдИ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдПрдХ рдЕрд╕рд▓реА рдореБрдХрд╛рдмрд▓рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?








рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ


рдЕрдВрдд рдореЗрдВ, рд╡рд░реНрдгрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд░рдирд╛ рдЧрд▓рдд рд╣реЛрдЧрд╛ рдЬреЛ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рд╣реИрдВред







рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдкреВрд░рд╛ рдкрд╛рда рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рдХрд╛рд░реНрдпрдХреНрд░рдо рдкреНрд░рд╕рд┐рджреНрдз рдиреЗрдиреЛрд╕реНрдкреЗрд▓рдЪрд░ рдкреАрдЯрд░ рдиреЙрд░рд╡рд┐рдЧ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рд▓рдВрдмрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╣реАрди рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЕрдкрдиреА рдХреНрд╖рдорддрд╛рдУрдВ рдореЗрдВ рдЗрд╕реЗ рдкрд╛рд░ рдХрд░рддрд╛ рд╣реИред

рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдмреЗрдХрд╛рд░ рдХреЗ рд▓рд┐рдВрдХ




рдорд┐рдЦрд╛рдЗрд▓ рдбреЛрд▓рд┐рдирд┐рди,
рдЦреЛрдЬ рдХреНрд╡реЗрд░реА рдЯреАрдо рд▓реАрдбрд░

Source: https://habr.com/ru/post/In178401/


All Articles