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

рдореИрдВрдиреЗ
рдпрд╣рд╛рдВ рд╢рдмреНрджреЛрдВ рдХреА рд╕реВрдЪреА рд▓реА, рд▓реЗрдХрд┐рди рдХреЛрдИ рднреА рдЕрдиреНрдп рд╢рдмреНрджрдХреЛрд╢ рдХрд░реЗрдЧрд╛ред рд╣рдо рдЗрд╕реЗ рдПрдХ рдЙрдкрд╕рд░реНрдЧ рд╡реГрдХреНрд╖ (рдЙрд░реНрдл рдЯреНрд░рд╛рдЗ) рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗред рдпрд╣рд╛рдБ рдЗрд╕рдХреА рдХреБрдЫ рд╣рдж рддрдХ
рд╡рд┐рджреЗрд╢реА рд╣реИ , рдкреВрд░реА рддрд░рд╣ рд╕реЗ
рдЗрд╖реНрдЯрддрдо рдирд╣реАрдВ, рдмрд▓реНрдХрд┐
рдЦрддрд░рдирд╛рдХ рд╣реИ , рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рд╕рдмрд╕реЗ
рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:
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 ) {} };
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
todo
рдЬрд╛рдиреЗ рдХрд╛ рд░рд╛рд╕реНрддрд╛ рд╣реИред рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдпрд╣ рд╡рд╣реА рдпрд╛рддреНрд░рд╛ рдорд╛рд░реНрдЧ рд╣реИ, рдЬреЛ рдХрд┐ рд╕рд╣реА рд╢рдмреНрдж рд╣реИред рдЖрдЦрд┐рд░ рдореЗрдВ рдПрдХ рдЦрд╛рд▓реА рд▓рд╛рдЗрди рд╣реИредdone
- рдкрде рдХрд╛ рдкрд╛рд░рд┐рдд рднрд╛рдЧред рд╢реБрд░реБрдЖрдд рдореЗрдВ - рдПрдХ рдЦрд╛рд▓реА рд░реЗрдЦрд╛, рдЕрдВрдд рдореЗрдВ - рдкрд╛рд╕ рдХреА рдЧрдИ рдиреЛрдбреНрд╕ рдХреА рдПрдХ рд╕реВрдЪреА, рдЬреЛ рдХрд┐, рдПрдХ рд╕рд╣реА рд╢рдмреНрдж рд╣реИредcost
- рдЬреБрд░реНрдорд╛рдирд╛ рдХреА рд░рд╛рд╢рд┐ред рд╢реБрд░реВ рдореЗрдВ - рд╢реВрдиреНрдп, рдЕрдВрдд рдореЗрдВ - рдпрд╣ рдХреИрд╕реЗ рдЬрд╛рддрд╛ рд╣реИредroad
- рдпрд╛рддреНрд░реА рдХрд╛ рд╕реНрдерд╛рдиред рд╢реБрд░реБрдЖрдд рдореЗрдВ - рдкреЗрдбрд╝ рдХреА рдЬрдбрд╝, рдЕрдВрдд рдореЗрдВ - рдкрддреНрддрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХред
рддреЛ, рдпрд╛рддреНрд░реА рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рдкрд░ рд╣реИ, рдЖрдк рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
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;
рдЪрд░рдг рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╕рдВрд░рдЪрдирд╛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдореВрд▓реНрдп рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдмрджрд▓ рдЬрд╛рдПрдВрдЧреЗ:
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];
рдкреНрд░рд╛рдХреГрддрд┐рдХ рдЪрдпрди
рдФрд░ рджреВрд╕рд░реА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ: рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдирдП рдФрд░ рдирдП рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдореЗрдВ рд╣рд┐рдорд╕реНрдЦрд▓рди рдЬреИрд╕рд╛ рдЙрддреНрдкрд╛рджрди, рд╣рдо рддрд░реНрдХрд╣реАрди рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВред рдкреЗрдбрд╝ рдкрд░ рдШреВрдордиреЗ рд╡рд╛рд▓реА рднреАрдбрд╝ рдЦрд░рд╛рдм рддрд░реАрдХреЗ рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реЛрддреА рд╣реИ, рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рд╡реЗ рдмреЗрдХрд╛рд░ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ рд╡реНрдпрд░реНрде рдореЗрдВ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЦрд╛ рдЬрд╛рддреЗ рд╣реИрдВред рд╣рдо рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд░рддреЗ рд╣реИрдВ - рдЙрдиреНрд╣реЗрдВ рдЪрд▓рдиреЗ рджреЗрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЬреБрд░реНрдорд╛рдирд╛ рдХреА рдЕрдзрд┐рдХрддрдо рд╕реНрд╡реАрдХрд╛рд░реНрдп рд░рд╛рд╢рд┐ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВрдЧреЗ, рдФрд░ рд╣рдо рд╣рд░ рдХрд┐рд╕реА рдХреЛ рдлреЗрдВрдХ рджреЗрдВрдЧреЗ рдЬреЛ рдЗрд╕реЗ рдкрд╛рд░ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ, рджрд┐рдП рдЧрдП рд░рд╛рд╕реНрддреЗ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИрдВред
рджреВрд╕рд░реЗ, рд╣рдо рдЙрди рд╕рднреА рдкрд┐рдЫрдбрд╝реЛрдВ рдХреЛ рджреВрд░ рд╕реЗ рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗред рд╕рдЪ рд╣реИ, рдПрдХ рдЬреЛрдЦрд┐рдо рд╣реИ рдХрд┐ рдирд┐рд╖реНрдХрд╛рд╕рд┐рдд рдмрд╛рд╣рд░реА рд▓реЛрдЧреЛрдВ рдХреЗ рдмреАрдЪ, рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рджреМрдбрд╝ рдХреЗ рдмрд╣реБрдд рдЕрдВрдд рдореЗрдВ рдиреЗрддрд╛рдУрдВ рд╕реЗ рдЖрдЧреЗ рдирд┐рдХрд▓ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдЦрдбрд╝рд╛ рд╣реЛрдирд╛ рд╣реЛрдЧрд╛ред
рдЬреЛ рд▓реЛрдЧ рдкрд┐рдЫрдбрд╝ рд░рд╣реЗ рд╣реИрдВ, рдЙрдирдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рднреА рдХреЗ рд╕рдлрд▓ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдПрдВрдЧреЗ, рдЕрд░реНрдерд╛рдд, рд╢реЗрд╖ рд░рд╛рд╢рд┐ рдЕрдзрд┐рдХрддрдо рд░рд╛рд╢рд┐ рд╕реЗ рдЕрдзрд┐рдХ рдХреЗ рд▓рд┐рдП рдЕрдпреЛрдЧреНрдпрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдХрд╡рд░ рдХреА рдЬрд╛рдПрдЧреАред рдореМрдХрд╛ рдХрд╛ рдЕрдиреБрдорд╛рди рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛:
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 );
рдпрд╣ рд▓рдЧрднрдЧ рд╕рднреА рд╣реИред
рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдХреЛ
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
рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЙрд╕рдХреЗ рд╕рднреА рдкрд░рд┐рдгрд╛рдо рд╕рд╣реА рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд╣реИред
рдпрд╛рддреНрд░рд╛ рдХреЗ рдкрд░рд┐рдгрд╛рдо
рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧреЛрдВ рдиреЗ рд╕реВрдЪрд┐рдд рдЦреЛрдЬ рдХреА рдХрд┐рд╕реНрдореЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рд╕реАрдЦрд╛ рд╣реИ -
рдП * рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо , рдпрд╛ рдмрд▓реНрдХрд┐, рдЗрд╕рдХреА рднрд┐рдиреНрдирддрд╛ - рдП * рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд╕рд╛рде рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдЧрд╣рд░реАрдХрд░рдг рдФрд░ рд╕реНрдореГрддрд┐ рд╕реАрдорд╛ред рдмреЗрд╢рдХ, рд╡рд░реНрдгрд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗрд╡рд▓ рдкрд╣рд▓рд╛ рд╣реИ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рдбрд╝рд╛рдИ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдПрдХ рдЕрд╕рд▓реА рдореБрдХрд╛рдмрд▓рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?
- рд╣рдорд╛рд░реЗ рд╕рдВрджрд░реНрдн рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ, рдХреЗрд╡рд▓ рд╢рдмреНрджреЛрдВ рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд░реВрдк рдореМрдЬреВрдж рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рд╡рд╣
рдХреЛ
рдХреЛ рд╕рд╣реА рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЧрд▓рдд рд╣реИред рдХрд┐рд╕реА рдХреЛ рдЖрдХреГрддрд┐ рд╡рд┐рдЬреНрдЮрд╛рди рдХреА рд╕рдордЭ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдпрд╛ рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рд╢рдмреНрджреЛрдВ рдХреЗ рд╕рднреА рд░реВрдкреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдкрд╣рд▓рд╛ рдмреЗрд╣рддрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдард┐рди рд╣реИред
- рд╕рднреА рд╢рдмреНрдж рд╕рдорд╛рди рд╣реИрдВред рдпрд╣ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдкрд░рд┐рдХрд▓реНрдкрдирд╛ рдХреЛ рдЪреБрдирдиреЗ рдореЗрдВ рдЕрд╢реБрджреНрдзрд┐рдпрд╛рдБ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИ:
1 1
рдпрджрд┐ рд╣рдо рд╢рдмреНрджреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рддреЛ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЬрд╛рдПрдЧреАред
- рд╕рднреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╕рдорд╛рди рд╣реИрдВред рдпрд╣рд╛рдБ рд╕реЗ рдРрд╕реЗ рдЕрдирд┐рд╢реНрдЪрд┐рдд рдкрд░рд┐рдгрд╛рдо рдЖрдП:
1 1
рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрднрд╛рд╡рд┐рдд рддреНрд░реБрдЯрд┐ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЬреБрд░реНрдорд╛рдирд╛ рдХреЗ рдЙрдиреНрдирдпрди рдХреЗ рджреНрд╡рд╛рд░рд╛ рдареАрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ред
рд╕рд╛рде
рдХреЛ рдмрджрд▓рдиреЗ рд╕реЗ
рд╕рд╛рде
рдХреА рддреБрд▓рдирд╛
рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдХ
рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред
- "рдкреБрдВрдЯреЛ рд╕реНрд╡рд┐рдЪрд┐рдВрдЧред" рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред рд╣рдо рдкреНрд░рдкрддреНрд░
q-
, w-
, a-
рдФрд░ рдПрдХ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рдЯрд╛рдЗрдкреЛ рдХреЗ рдПрдХ рдкрддреНрд░рд╛рдЪрд╛рд░ рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ - рдПрдХ рд▓реЗрдЖрдЙрдЯ рдкрд░рд┐рд╡рд░реНрддрдиред рд╣реЛ рдЧрдпрд╛ред
- рд▓рд▓рдЪрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╢рдмреНрдж рдФрд░ рд▓рд▓рдЪрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╢рдмреНрджред рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ "рдпрд╛рддреНрд░рд┐рдпреЛрдВ" рдХреЛ рдкреЗрдбрд╝ рдХреА рдкрддреНрддреА рдХреЗ рдиреЛрдбреНрд╕ рд╕реЗ рдЗрд╕рдХреА рдЬрдбрд╝ рддрдХ рдХреВрджрдирд╛ рдФрд░ рдЕрд▓рдЧ рд╕реЗ рдЙрдирдХреЗ рдорд╛рд░реНрдЧреЛрдВ рдореЗрдВ рдЕрдВрддрд░рд╛рд▓ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рд╕рд┐рдЦрд╛рдпрд╛ рдЬрд╛рдПред
- рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╕реБрдзрд╛рд░ред рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдПрдХ рд╣реА рд╢рдмреНрдж рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рдФрд░
,
рдФрд░
, рдПрдХ
рдФрд░ рдПрдХ
ред рдРрд╕реЗ рдЯрд╛рдЗрдкреЛрд╕ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдВрдЦреНрдпрд┐рдХреА рдФрд░ / рдпрд╛ рд╡реНрдпрд╛рдХрд░рдг рдХреЗ рдирд┐рдпрдореЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдПрдХ рднрд╛рд╖рд╛ рдореЙрдбрд▓ред рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдХрд╣рд╛рдиреА рд╣реИред
рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ
рдЕрдВрдд рдореЗрдВ, рд╡рд░реНрдгрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд░рдирд╛ рдЧрд▓рдд рд╣реЛрдЧрд╛ рдЬреЛ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рд╣реИрдВред
- рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рджрд┐рдП рдЧрдП "рдорд╛рд░реНрдЧ" рдХреЗ рдЕрдВрдд рдореЗрдВ рд╡рд░реНрдг рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рджрдВрдб рдХреЛ рд░рджреНрдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдСрдЯреЛ-рдкреВрд░реНрдг рд╣реЛрдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рддрд╛ рд╣реИред
- рдпрджрд┐ рд╣рдо рд╡рд░реНрдгреЛрдВ рдХреЗ рдзреНрд╡рдиреНрдпрд╛рддреНрдордХ рдкрддреНрд░рд╛рдЪрд╛рд░ рдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреА рдХрд┐рд╕реА рднреА рдбрд┐рдЧреНрд░реА рдХреА рд▓рд┐рдкреНрдпрдВрддрд░рдг рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рдгрд╛рд▓реА рдорд┐рд▓рддреА рд╣реИред рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╡рд╛рд▓рд╛ рд╢рдмреНрдж рдорд┐рд▓реЗрдЧрд╛ред
тЖТ j, zh, g, dj j тЖТ , , , ...
- рд╕рдВрдЦреНрдпрд╛рдУрдВ рдФрд░ рдкрддреНрд░реЛрдВ рдХреЗ рдкрддреНрд░рд╛рдЪрд╛рд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкреЗрдбрд╝ рдкрд░ рд╕рдВрдХреНрд░рдордг рдПрдХ рдЯреА 9 рд╕реЗрдЯ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╡рд░реНрддрдиреА рдЬрд╛рдВрдЪрдХ рдХреЛ рдмрджрд▓ рджреЗрдЧрд╛:
2 тЖТ ... 9 тЖТ
- рддреНрд░реБрдЯрд┐ рдХреА рд▓рд╛рдЧрдд, рдЯрд╛рдЗрдкреЛ рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдкрд░ рдЧрдгрдирд╛ рдирд╣реАрдВ рдХреА рдЧрдИ, рд▓реЗрдХрд┐рди рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХреБрдВрдЬреА (рдпрд╛ рдмрд▓реНрдХрд┐, рдЯрдЪ рд╕реНрдХреНрд░реАрди рдкрд░ рдЙрдирдХреА рдЫрд╡рд┐рдпрд╛рдВ) рдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА рдкрд░ "рдЪрд▓рддреА" рд╢рдмреНрдж рдЗрдирдкреБрдЯ - рд╕реНрд╡рд╛рдЗрдк рдХреА рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред
- рдлрд╝рдЬрд╝реА рд╕рд░реНрдЪ рдХрд╛ рдХрд╛рд░реНрдп рднрд╛рд╖рдг рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ, рд╣рд╕реНрддрд▓рд┐рдЦрд┐рдд рдЧреНрд░рдВрдереЛрдВ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ ... рд╣рд╛рд▓рд╛рдБрдХрд┐, рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реЗ рд╣реА рдмрд╣реБрдд рдХреБрдЫ рд▓рд┐рдЦрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИред
рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдкреВрд░рд╛ рдкрд╛рда
рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред рдХрд╛рд░реНрдпрдХреНрд░рдо рдкреНрд░рд╕рд┐рджреНрдз рдиреЗрдиреЛрд╕реНрдкреЗрд▓рдЪрд░ рдкреАрдЯрд░ рдиреЙрд░рд╡рд┐рдЧ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рд▓рдВрдмрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╣реАрди рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЕрдкрдиреА рдХреНрд╖рдорддрд╛рдУрдВ рдореЗрдВ рдЗрд╕реЗ рдкрд╛рд░ рдХрд░рддрд╛ рд╣реИред
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
рдмреЗрдХрд╛рд░ рдХреЗ рд▓рд┐рдВрдХ
рдорд┐рдЦрд╛рдЗрд▓ рдбреЛрд▓рд┐рдирд┐рди,
рдЦреЛрдЬ рдХреНрд╡реЗрд░реА рдЯреАрдо рд▓реАрдбрд░