
рд╣рдо рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ рдЬреЛ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЪреИрдВрдкрд┐рдпрдирд╢рд┐рдк рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдП рдЧрдП рдереЗред рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рдорд╢реАрди рд╕реАрдЦрдиреЗ рдХреЗ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рдХреЗ рд▓рд┐рдП рдпреЛрдЧреНрдпрддрд╛ рджреМрд░ рд╕реЗ рд▓рд┐рдП рдЧрдП рдХрд╛рд░реНрдп рд╣реИрдВред рдпрд╣ рдЪрд╛рд░ (рдмреИрдХрдПрдВрдб, рдлреНрд░рдВрдЯреЗрдВрдб, рдПрдордПрд▓, рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕) рдХрд╛ рддреАрд╕рд░рд╛ рдЯреНрд░реИрдХ рд╣реИред рдЧреНрд░рдВрдереЛрдВ рдореЗрдВ рдЯрд╛рдЗрдкреЛ рдХреЛ рд╕рд╣реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореЙрдбрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ, рд╕реНрд▓реЙрдЯ рдорд╢реАрдиреЛрдВ рдкрд░ рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░рдгрдиреАрддрд┐ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡, рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХреА рдПрдХ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рдФрд░ рдХрдИ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреА рд░рдЪрдирд╛ рдХрд░рдирд╛ред
A. рдЯрд╛рдЗрдкреЛ
рд╢рд░реНрдд
(рдПрдкреАрдЧреНрд░рд╛рдл) (рдПрдХ рдордВрдЪ рд╕реЗ)
- рдЗрд╕ рдмрдХрд╡рд╛рд╕ рдХреА рд░рдЪрдирд╛ рдХрд┐рд╕рдиреЗ рдХреА?
- рдПрд╕реНрдЯреНрд░реЛрдлрд┐рдЬрд┐рд╕рд┐рд╕реНрдЯред рд╡реЗ рд▓реЛрдЧ рднреА рд╣реИрдВред
- рдЖрдкрдиреЗ "рдкрддреНрд░рдХрд╛рд░" рд╢рдмреНрдж рдореЗрдВ 10 рдЧрд▓рддрд┐рдпрд╛рдБ рдХреА рд╣реИрдВред
рдХрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреА рдЧрд▓рддрд┐рдпрд╛рдБ рдХрд░рддреЗ рд╣реИрдВ, рдХреБрдЫ рдХреА рдорд╛рд░ рдХреА рд╡рдЬрд╣ рд╕реЗ, рдФрд░ рдХреБрдЫ рдЕрдкрдиреА рдЕрд╢рд┐рдХреНрд╖рд╛ рдХреЗ рдХрд╛рд░рдгред рд╣рдо рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рд╢рдмреНрдж рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЙрд╕рдиреЗ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдерд╛ред
рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ, рдорд╛рди рд▓реЗрдВ рдХрд┐ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдореЙрдбрд▓ рд╣реЛрддрд╛ рд╣реИ: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрд╕ рд╢рдмреНрдж рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╡рд╣ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдмрд╛рдж рдореЗрдВ рдЗрд╕рдореЗрдВ рдХрдИ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдХрд░рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдЧрд▓рддреА рджреВрд╕рд░реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд▓рд┐рдП рд╢рдмреНрдж рдХреЗ рдХреБрдЫ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХрд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╣реИред рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗрд╡рд▓ рдПрдХ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ (рдЕрд░реНрдерд╛рдд, рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд┐рдпрдо "abc" тЖТ "cba" рджреНрд╡рд╛рд░рд╛ рдПрдХ рд╣реА рддреНрд░реБрдЯрд┐ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ "abcabc" рд╕реЗ рд╡рд╣ рдпрд╛ рддреЛ "cbaabc рдпрд╛" abccba ") рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд╛рдж, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджреЛрд╣рд░рд╛рддреА рд╣реИред рдПрдХ рд╣реА рдирд┐рдпрдо рдХреЛ рдХрдИ рдмрд╛рд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪрд░рдгреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, "cbacba" рдХреЛ рджреЛ рдЪрд░рдгреЛрдВ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред
рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рджреА рдЧрдИ рдПрдХ рд╢рдмреНрдж рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдФрд░ рдХрд┐рд╕реА рдЕрдиреНрдп рдиреЗ рд▓рд┐рдЦреА рдЧрдИ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдиреНрдпреВрдирддрдо рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рд╣реЛред
I / O рдкреНрд░рд╛рд░реВрдк рдФрд░ рдЙрджрд╛рд╣рд░рдгрдЗрдирдкреБрдЯ рдкреНрд░рд╛рд░реВрдк
рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╢рдмреНрдж рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬреЛ рд╣рдорд╛рд░реА рдзрд╛рд░рдгрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдорди рдореЗрдВ рдерд╛ (рдЗрд╕рдореЗрдВ рдирд┐рдЪрд▓реЗ рд╡рд░реНрдг рдореЗрдВ рд▓реИрдЯрд┐рди рд╡рд░реНрдгрдорд╛рд▓рд╛ рдХреЗ рдЕрдХреНрд╖рд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рд▓рдВрдмрд╛рдИ 20 рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИ)ред
рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╡рд╣ рд╢рдмреНрдж рд╣реИ рдЬреЛ рдЙрд╕рдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рд┐рдЦрд╛ рдерд╛ (рдЗрд╕рдореЗрдВ рдирд┐рдЪрд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд▓реИрдЯрд┐рди рд╡рд░реНрдгрдорд╛рд▓рд╛ рдХреЗ рдЕрдХреНрд╖рд░ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рд▓рдВрдмрд╛рдИ 20 рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИ)ред
рддреАрд╕рд░реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рдПрдХ рдПрдХрд▓ рд╕рдВрдЦреНрдпрд╛ N (N <50) рд╣реИ - рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреА рд╕рдВрдЦреНрдпрд╛ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИред
рдЕрдЧрд▓реА рдПрди рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдкреНрд░рд╛рд░реВрдк рдФрд░ рд▓реЗрдлреНрдЯрд┐рдиреЗрдВрдЯ "рд╕рд╣реА" рдЕрдХреНрд╖рд░ рдЕрдиреБрдХреНрд░рдо & gt <рд╕реНрдерд╛рди> <"рдЧрд▓рдд" рдЕрдиреБрдХреНрд░рдо рдЕрдиреБрдХреНрд░рдо> рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЕрдиреБрдХреНрд░рдо 6 рд╡рд░реНрдгреЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рд▓рдВрдмреЗ рдирд╣реАрдВ рд╣реИрдВред
рдЖрдЙрдЯрдкреБрдЯ рд╕реНрд╡рд░реВрдк
рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬреЛ рдиреНрдпреВрдирддрдо рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рд╕рдВрдЦреНрдпрд╛ 4 рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ рдпрд╛ рдПрдХ рд╢рдмреНрдж, рдкреНрд░рд┐рдВрдЯ -1 рд╕реЗ рджреВрд╕рд░реЗ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред
рдЙрджрд╛рд╣рд░рдг
рдирд┐рд░реНрдгрдп
рдЖрдЗрдП 4 рд╕реЗ рдЕрдзрд┐рдХ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рднреА рд╕рдВрднрд╡ рд╢рдмреНрджреЛрдВ рдХреЛ рд╕рд╣реА рд╡рд░реНрддрдиреА рд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рдореЗрдВ, O ((L )N)
4 ) рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╕рдорд╕реНрдпрд╛ рдХреА рд╕реАрдорд╛рдУрдВ рдореЗрдВ, рдпрд╣ рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рдХреИрд╕реЗ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдореАрдЯ-рдЗрди-рдж-рдмреАрдЪ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдРрд╕реЗ рд╢рдмреНрдж рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ рдЬрд┐рдирдореЗрдВ 2 рд╕реЗ рдЕрдзрд┐рдХ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рди рд╣реЛрдВ, рд╕рд╛рде рд╣реА рд╡реЗ рд╢рдмреНрдж рдЬрд┐рдирд╕реЗ рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рд▓рд┐рдЦрд┐рдд рд╢рдмреНрдж рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ 2 рд╕реЗ рдЕрдзрд┐рдХ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рди рд╣реЛрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрдЯ рдХрд╛ рдЖрдХрд╛рд░ 10
6 рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдХреА рдЧрдИ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ 4 рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпреЗ рд╕реЗрдЯ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред рдЗрд╕реА рддрд░рд╣, рд╣рдо рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ 3, 2 рдФрд░ 1 рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИред
struct FromTo { std::string from; std::string to; }; std::pair<size_t, std::string> applyRule(const std::string& word, const FromTo &fromTo, int pos) { while(true) { int from = word.find(fromTo.from, pos); if (from == std::string::npos) { return {std::string::npos, {}}; } int to = from + fromTo.from.size(); auto cpy = word; for (int i = from; i < to; i++) { cpy[i] = fromTo.to[i - from]; } return {from, std::move(cpy)}; } } void inverseRules(std::vector<FromTo> &rules) { for (auto& rule: rules) { std::swap(rule.from, rule.to); } } int solve(std::string& wordOrig, std::string& wordMissprinted, std::vector<FromTo>& replaces) { std::unordered_map<std::string, int> mapping; std::unordered_map<int, std::string> mappingInverse; mapping.emplace(wordOrig, 0); mappingInverse.emplace(0, wordOrig); mapping.emplace(wordMissprinted, 1); mappingInverse.emplace(1, wordMissprinted); std::unordered_map<int, std::unordered_set<int>> edges; auto buildGraph = [&edges, &mapping, &mappingInverse](int startId, const std::vector<FromTo>& replaces, bool dir) { std::unordered_set<int> mappingLayer0; mappingLayer0 = {startId}; for (int i = 0; i < 2; i++) { std::unordered_set<int> mappingLayer1; for (const auto& v: mappingLayer0) { auto& word = mappingInverse.at(v); for (auto& fromTo: replaces) { size_t from = 0; while (true) { auto [tmp, wordCpy] = applyRule(word, fromTo, from); if (tmp == std::string::npos) { break; } from = tmp + 1; { int w = mapping.size(); mapping.emplace(wordCpy, w); w = mapping.at(wordCpy); mappingInverse.emplace(w, std::move(wordCpy)); if (dir) { edges[v].emplace(w); } else { edges[w].emplace(v); } mappingLayer1.emplace(w); } } } } mappingLayer0 = std::move(mappingLayer1); } }; buildGraph(0, replaces, true); inverseRules(replaces); buildGraph(1, replaces, false); { std::queue<std::pair<int, int>> q; q.emplace(0, 0); std::vector<bool> mask(mapping.size(), false); int level{0}; while (q.size()) { auto [w, level] = q.front(); q.pop(); if (mask[w]) { continue; } mask[w] = true; if (mappingInverse.at(w) == wordMissprinted) { return level; } for (auto& v: edges[w]) { q.emplace(v, level + 1); } } } return -1; }
B. рдХрдИ-рд╣рдерд┐рдпрд╛рд░рдмрдВрдж рдбрд╛рдХреВ
рд╢рд░реНрдд
рдпрд╣ рдПрдХ рд╕рдВрд╡рд╛рджрд╛рддреНрдордХ рдХрд╛рд░реНрдп рд╣реИред
рдЖрдк рдЦреБрдж рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рд╣реБрдЖ, рд▓реЗрдХрд┐рди рдЖрдкрдиреЗ рдЦреБрдж рдХреЛ рд╣реЙрд▓ рдореЗрдВ рд╕реНрд▓реЙрдЯ рдорд╢реАрдиреЛрдВ рдХреЗ рд╕рд╛рде рдЯреЛрдХрди рдХреЗ рдкреВрд░реЗ рдмреИрдЧ рдХреЗ рд╕рд╛рде рдкрд╛рдпрд╛ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдмреЙрдХреНрд╕ рдСрдлрд┐рд╕ рдкрд░, рдЙрдиреНрд╣реЛрдВрдиреЗ рдЯреЛрдХрди рд╡рд╛рдкрд╕ рд▓реЗрдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛, рдФрд░ рдЖрдкрдиреЗ рдЕрдкрдиреА рдХрд┐рд╕реНрдордд рдЖрдЬрдорд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рд╣реЙрд▓ рдореЗрдВ рдХрдИ рд╕реНрд▓реЙрдЯ рдорд╢реАрдиреЗрдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рд╕реНрд▓реЙрдЯ рдорд╢реАрди рдХреЗ рд╕рд╛рде рдПрдХ рдЧреЗрдо рдХреЗ рд▓рд┐рдП рдЖрдк рдПрдХ рдЯреЛрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рдЬреАрдд рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдорд╢реАрди рдЖрдкрдХреЛ рдПрдХ рдбреЙрд▓рд░ рджреЗрддреА рд╣реИ, рдиреБрдХрд╕рд╛рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ - рдХреБрдЫ рднреА рдирд╣реАрдВред рдкреНрд░рддреНрдпреЗрдХ рдорд╢реАрди рдореЗрдВ рдЬреАрддрдиреЗ рдХреА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрднрд╛рд╡рдирд╛ рд╣реЛрддреА рд╣реИ (рдЬрд┐рд╕реЗ рдЖрдк рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ), рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рднрд┐рдиреНрди рдорд╢реАрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╣реИред рдЗрди рдорд╢реАрдиреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдорд╢реАрди рдХреЗ рд▓рд┐рдП рдЬреАрддрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреБрдЫ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде
рдмреАрдЯрд╛ рд╡рд┐рддрд░рдг рд╕реЗ рд╡рд┐рдирд┐рд░реНрдорд╛рдг рд╕реНрддрд░ рдкрд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рдЪреБрдиреА рдЬрд╛рддреА рд╣реИред
рдЖрдк рдЕрдкрдиреА рдЕрдкреЗрдХреНрд╖рд┐рдд рдЬреАрдд рдХреЛ рдЕрдзрд┐рдХрддрдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
I / O рдкреНрд░рд╛рд░реВрдк рдФрд░ рдЙрджрд╛рд╣рд░рдгрдЗрдирдкреБрдЯ рдкреНрд░рд╛рд░реВрдк
рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ рдХрдИ рдкрд░реАрдХреНрд╖рдг рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдкреНрд░рддреНрдпреЗрдХ рдкрд░реАрдХреНрд╖рдг рдЗрд╕ рддрдереНрдп рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд▓рд╛рдЗрди рдкрд░ рдЖрдкрдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдПрдХ рд╕реНрдерд╛рди рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рджреЛ рдкреВрд░реНрдгрд╛рдВрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: рдирдВрдмрд░ N рдЖрдкрдХреЗ рдмреИрдЧ рдореЗрдВ рдЯреЛрдХрди рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИ, рдФрд░ M рд╣реЙрд▓ рдореЗрдВ рдорд╢реАрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИ (N
4 10
4 , M (рдорд┐рдирдЯ (N, 100) )ред рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рджреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрдЦреНрдпрд╛рдПрдБ ╬▒ рдФрд░ line (1 ╬▒ ╬▒, тЙд) 10) рд╣реИрдВ - рдЬреАрддрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рдмреАрдЯрд╛ рд╡рд┐рддрд░рдг рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ред
рдЪреЗрдХрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдпрд╣ рд╣реИ: рдЖрдк рдмрд┐рд▓реНрдХреБрд▓ рдПрди рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрд▓рдЧ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдЙрд╕ рдорд╢реАрди рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рдЖрдк рдЦреЗрд▓реЗрдВрдЧреЗ (1 рд╕реЗ рдПрдо рд╕рдорд╛рд╡реЗрд╢реА)ред рдПрдХ рдЙрддреНрддрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдХ рдЕрд▓рдЧ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдпрд╛ рддреЛ "0" рдпрд╛ "1" рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдЕрдиреБрд░реЛрдзрд┐рдд рд╕реНрд▓реЙрдЯ рдорд╢реАрди рдХреЗ рд╕рд╛рде рдПрдХ рдЧреЗрдо рдореЗрдВ рдПрдХ рдиреБрдХрд╕рд╛рди рдФрд░ рдПрдХ рдЬреАрддред
рдЕрдВрддрд┐рдо рдкрд░реАрдХреНрд╖рд╛ рдХреЗ рдмрд╛рдж, рд╕рдВрдЦреНрдпрд╛ N рдФрд░ M рдХреЗ рдмрдЬрд╛рдп, рджреЛ рд╢реВрдиреНрдп рд╣реЛрдВрдЧреЗред
рдЖрдЙрдЯрдкреБрдЯ рд╕реНрд╡рд░реВрдк
рдпрджрд┐ рдЖрдкрдХрд╛ рдирд┐рд░реНрдгрдп рдЬреВрд░реА рдХреЗ рдирд┐рд░реНрдгрдп рд╕реЗ рдмрд╣реБрдд рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИ рддреЛ рдХрд╛рд░реНрдп рдкреВрд░рд╛ рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рдЖрдкрдХрд╛ рдирд┐рд░реНрдгрдп рдЬреВрд░реА рдХреЗ рдирд┐рд░реНрдгрдп рд╕реЗ рдХрд╛рдлреА рдЦрд░рд╛рдм рд╣реИ, рддреЛ рдЖрдк рдлреИрд╕рд▓реЗ рдХреЛ "рдЧрд▓рдд рдЙрддреНрддрд░" рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред
рдпрд╣ рдЧрд╛рд░рдВрдЯреА рджреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдкрдХрд╛ рдирд┐рд░реНрдгрдп рдЬреВрд░реА рдХреЗ рдлреИрд╕рд▓реЗ рд╕реЗ рднреА рдмрджрддрд░ рдирд╣реАрдВ рд╣реИ, рддреЛ рдирд┐рд░реНрдгрдп "рдЧрд▓рдд рдЙрддреНрддрд░" рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛
10-6 рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИред
рдиреЛрдЯ
рд╕рд╣рднрд╛рдЧрд┐рддрд╛ рдЙрджрд╛рд╣рд░рдг:
____________________ stdin stdout ____________________ ____________________ 5 2 2 2 2 1 1 0 1 1 2 1 2 1
рдирд┐рд░реНрдгрдп
рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╕рд░реНрд╡рд╡рд┐рджрд┐рдд рд╣реИ, рдЗрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬреВрд░реА рдХреЗ рдореБрдЦреНрдп рдирд┐рд░реНрдгрдп рдиреЗ
рдереЙрдореНрдкрд╕рди рдирдореВрдирд╛рдХрд░рдг рд░рдгрдиреАрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЪрд░рдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЬреНрдЮрд╛рдд рдереА, рдЗрд╕рд▓рд┐рдП рдЕрдзрд┐рдХ рдЗрд╖реНрдЯрддрдо рд░рдгрдиреАрддрд┐рдпрд╛рдБ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпреВрд╕реАрдмреА 1)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рднреА рдПрдкреНрд╕рд┐рд▓реЙрди-рд▓рд╛рд▓рдЪреА-рд░рдгрдиреАрддрд┐ рдХреЗ рд╕рд╛рде рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ: рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде and рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдорд╢реАрди рдЦреЗрд▓рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдкреНрд░рд╛рдпрд┐рдХрддрд╛ рдХреЗ рд╕рд╛рде (1 - best) рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдЬреАрдд рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдорд╢реАрди рдЦреЗрд▓рддреЗ рд╣реИрдВред
class SolverFromStdIn(object): def __init__(self): self.regrets = [0.] self.total_win = [0.] self.moves = [] class ThompsonSampling(SolverFromStdIn): def __init__(self, bandits_total, init_a=1, init_b=1): """ init_a (int): initial value of a in Beta(a, b). init_b (int): initial value of b in Beta(a, b). """ SolverFromStdIn.__init__(self) self.n = bandits_total self.alpha = init_a self.beta = init_b self._as = [init_a] * self.n
C. рд╡рд╛рдХреНрдпреЛрдВ рдХрд╛ рд╕рдВрд░реЗрдЦрдг
рд╢рд░реНрдд
рдПрдХ рдЕрдЪреНрдЫреА рдорд╢реАрди рдЕрдиреБрд╡рд╛рдж рдореЙрдбрд▓ рдХреЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕рдорд╛рдирд╛рдВрддрд░ рдорд╛рдорд▓реЛрдВ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдорд╛рдорд▓рд╛ рд╣реИред рдЖрдорддреМрд░ рдкрд░, рд╕рдорд╛рдирд╛рдВрддрд░ рдСрдлрд╝рд░ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рд╕рдорд╛рдирд╛рдВрддрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╣реИрдВред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЕрдХреНрд╕рд░ рд╕рдорд╛рдирд╛рдВрддрд░ рд╡рд╛рдХреНрдпреЛрдВ рдХрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдХреЛрд╖ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрдирдХреА рд▓рдВрдмрд╛рдИ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рднреА рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЖрдк рдиреЛрдЯрд┐рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕реНрд░реЛрдд рднрд╛рд╖рд╛ рдореЗрдВ рдЬрд┐рддрдиреА рд▓рдВрдмреА рдЕрд╡рдзрд┐ рд╣реЛрдЧреА, рдЙрддрдиреЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЗрд╕рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗрдЧрд╛ред рдХреБрдЫ рдХрдард┐рдирд╛рдИ рдЗрд╕ рддрдереНрдп рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ рдХрд┐ рдЕрдиреБрд╡рд╛рдж рдХреЗ рджреМрд░рд╛рди рдкрд╛рда рдореЗрдВ рд╡рд╛рдХреНрдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрджрд▓ рд╕рдХрддреА рд╣реИ: рдХрднреА-рдХрднреА рдЕрдиреБрд╡рд╛рдж рдореЗрдВ рджреЛ рдЖрд╕рдиреНрди рд╡рд╛рдХреНрдпреЛрдВ рдХреЛ рдПрдХ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд - рдПрдХ рд╡рд╛рдХреНрдп рдХреЛ рджреЛ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреБрдЫ рджреБрд░реНрд▓рдн рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╡рд╛рдХреНрдпреЛрдВ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрд╡рд╛рдж рдореЗрдВ рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдЕрдиреБрд╡рд╛рдж рдореЗрдВ рдРрд╕рд╛ рдЕрдиреБрд╡рд╛рдж рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдореВрд▓ рдореЗрдВ рдирд╣реАрдВ рдерд╛ред
рдЕрдзрд┐рдХ рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ, рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╕рдорд╛рдирд╛рдВрддрд░ рдмрд╛рдбрд╝реЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЗрдирд░рд┐рдХ рдореЙрдбрд▓ рд╕рддреНрдп рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдкрд░, рд╣рдо рдирд┐рдореНрди рдореЗрдВ рд╕реЗ рдПрдХ рдХрд░рддреЗ рд╣реИрдВ:
1. рд░реЛрдХрдкреНрд░рд╛рдпрд┐рдХрддрд╛ p
h рдХреЗ рд╕рд╛рде, рд╣рд▓реНрд╕
рдХреА рдкреАрдврд╝реА рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреА рд╣реИред
2. [резрежрей] рд╕реНрдХрд┐рдкрд┐рдВрдЧ рдСрдлрд░рдкреНрд░рд╛рдпрд┐рдХрддрд╛ p
d рдХреЗ рд╕рд╛рде рд╣рдо рдореВрд▓ рдкрд╛рда рдореЗрдВ рдПрдХ рд╡рд╛рдХреНрдп рд▓рд┐рдЦрддреЗ рд╣реИрдВред рд╣рдо рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВред рдореВрд▓ рднрд╛рд╖рд╛ L selected 1 рдореЗрдВ рд╡рд╛рдХреНрдп рдХреА рд▓рдВрдмрд╛рдИ рдЕрд╕рддрдд рд╡рд┐рддрд░рдг рд╕реЗ рдЪреБрдиреА рдЧрдИ рд╣реИ:

ред
рдпрд╣рд╛рдБ
╬╝ s , are
s рд╡рд┐рддрд░рдг рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ, рдФрд░
╬▒ s рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдЧреБрдгрд╛рдВрдХ рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐

ред
3. [0-1] рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░реЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд╕рдВрднрд╛рд╡реНрдпрддрд╛ p
i рдХреЗ рд╕рд╛рде рд╣рдо рдЕрдиреБрд╡рд╛рдж рдХреЛ рдПрдХ рд╡рд╛рдХреНрдп
рджреЗрддреЗ рд╣реИрдВред рд╣рдо рдореВрд▓ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдЕрдиреБрд╡рд╛рдж рднрд╛рд╖рд╛ L selected 1 рдореЗрдВ рдПрдХ рд╡рд╛рдХреНрдп рдХреА рд▓рдВрдмрд╛рдИ рдПрдХ рдЕрд╕рддрдд рд╡рд┐рддрд░рдг рд╕реЗ рдЪреБрдиреА рдЧрдИ рд╣реИ:

ред
рдпрд╣рд╛рдБ
╬╝ t , are
t рд╡рд┐рддрд░рдг рдорд╛рдирджрдВрдб рд╣реИрдВ, рдФрд░
╬▒ t рд╕рд╛рдорд╛рдиреНрдпрдХрд░рдг рдЧреБрдгрд╛рдВрдХ рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐

ред
4. рдЕрдиреБрд╡рд╛рджрд╕рдВрднрд╛рд╡реНрдпрддрд╛ рдХреЗ рд╕рд╛рде (1 - p
d - p
i - p
h ) рд╣рдо рд╡рд╛рдХреНрдп рдХреА рд▓рдВрдмрд╛рдИ рдХреЛ рдореВрд▓ рднрд╛рд╖рд╛ L
s distribution 1 рдореЗрдВ рд╡рд┐рддрд░рдг p
s (рдЧреЛрд▓рд╛рдХрд╛рд░ рдХреЗ рд╕рд╛рде) рд╕реЗ рд▓реЗрддреЗ рд╣реИрдВред рдЕрдЧрд▓рд╛, рд╣рдо рд╕рд╢рд░реНрдд рдЕрд╕рддрдд рд╡рд┐рддрд░рдг рд╕реЗ рдЕрдиреБрд╡рд╛рдж рднрд╛рд╖рд╛ L
t the 1 рдореЗрдВ рд╡рд╛рдХреНрдп рдХреА рд▓рдВрдмрд╛рдИ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ:

ред
рдпрд╣рд╛рдВ,
╬▒ рд╕реЗрдВрдЯ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдЧреБрдгрд╛рдВрдХ рд╣реИ, рдФрд░ рд╢реЗрд╖ рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ рдкрд┐рдЫрд▓реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИрдВред
рдЕрдЧрд▓рд╛ рдПрдХ рдФрд░ рдХрджрдо рд╣реИ:
1. [2-1] рд╕рдВрднрд╛рд╡реНрдпрддрд╛ p
рд╡рд┐рднрд╛рдЬрди s рдХреЗ рд╕рд╛рде, рдореВрд▓ рднрд╛рд╖рд╛ рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╡рд╛рдХреНрдп рджреЛ рдЧреИрд░-рдЦрд╛рд▓реА рд▓реЛрдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╢рдмреНрджреЛрдВ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛
рдареАрдХ рдПрдХ рд╕реЗ рдмрдврд╝ рдЬрд╛рддреА рд╣реИ ред рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рд▓рдВрдмрд╛рдИ L рдХрд╛ рдПрдХ рд╡рд╛рдХреНрдп L
1 рдФрд░ L
2 рдХреЗ рднрд╛рдЧреЛрдВ рдореЗрдВ рдЕрд▓рдЧ рд╣реЛ
рдЬрд╛рдПрдЧрд╛ (рдпрд╛рдиреА, L
1 + L
2 = L
s + 1) P
s (L
1 )
s P
s (L
2 ) рдХреЗ рд╕рдорд╛рдиреБрдкрд╛рддреА рд╣реЛрдЧрд╛ред
2. [1-2] рдкреНрд░рд╛рдпрд┐рдХрддрд╛ p
рд╡рд┐рднрд╛рдЬрд┐рдд рдЯреА рдХреЗ рд╕рд╛рде, рд▓рдХреНрд╖реНрдп рднрд╛рд╖рд╛ рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╡рд╛рдХреНрдп рджреЛ рдЧреИрд░-рд░рд┐рдХреНрдд рд╡рд╛рдХреНрдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╢рдмреНрджреЛрдВ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рдареАрдХ рдПрдХ рд╕реЗ рдмрдврд╝ рдЬрд╛рддреА рд╣реИред рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рд▓рдВрдмрд╛рдИ рдПрд▓ рдХрд╛ рдПрдХ рд╡рд╛рдХреНрдп рдПрд▓ 1 рдФрд░ рдПрд▓ 2 рдХреЗ рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рдЕрд▓рдЧ рд╣реЛ
рдЬрд╛рдПрдЧрд╛ (рдпрд╛рдиреА, рдПрд▓
1 + рдПрд▓
2 = рдПрд▓
рдЯреА + 1) рдкреА
рдЯреА (рдПрд▓
1 ) тЛЕ рдкреА
рдЯреА (рдПрд▓
2 ) рдХреЗ рд▓рд┐рдП рдЖрдиреБрдкрд╛рддрд┐рдХ рд╣реИред
3. 3. [1-1] (1 - p
рд╡рд┐рднрд╛рдЬрди s - p
рд╡рд┐рднрд╛рдЬрди t ) рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде, рдЙрддреНрдкрдиреНрди рд╡рд╛рдХреНрдпреЛрдВ рдХреА рдЬреЛрдбрд╝реА рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдХреНрд╖рдп рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
I / O рдкреНрд░рд╛рд░реВрдк, рдЙрджрд╛рд╣рд░рдг рдФрд░ рдиреЛрдЯреНрд╕рдЗрдирдкреБрдЯ рдкреНрд░рд╛рд░реВрдк
рдлрд╝рд╛рдЗрд▓ рдХреА рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╡рд┐рддрд░рдг рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ: p
h , p
d , p
i , p
рд╡рд┐рднрд╛рдЬрди s , p
рд╡рд┐рднрд╛рдЬрди t , ╬╝
s , file
s , ╬╝
t ,ред Tред 0.1 ╧Г тЙд
s <тЙд
t тЙд 3. 0, ╬╝
s , ╬╝
t ред 5ред
рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╕рдВрдЦреНрдпрд╛рдПрдБ N
s рдФрд░ N
t рд╣реИрдВ - рдореВрд▓ рднрд╛рд╖рд╛ рдореЗрдВ рдФрд░ рд▓рдХреНрд╖реНрдп рднрд╛рд╖рд╛ рдореЗрдВ рдХреНрд░рдорд╢рдГ рд╡рд╛рдХреНрдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ (1 (N
s , N
t тЙд 1000)ред
рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рдПрди
s рдкреВрд░реНрдгрд╛рдВрдХ рд╣реИрдВ - рдореВрд▓ рднрд╛рд╖рд╛ рдореЗрдВ рд╡рд╛рдХреНрдпреЛрдВ рдХреА рд▓рдВрдмрд╛рдИред рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рдПрди
рдЯреА рдкреВрд░реНрдгрд╛рдВрдХ рд╣реИрдВ - рд▓рдХреНрд╖реНрдп рднрд╛рд╖рд╛ рдореЗрдВ рд╡рд╛рдХреНрдпреЛрдВ рдХреА рд▓рдВрдмрд╛рдИред
рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рджреЛ рдирдВрдмрд░ рд╣реЛрддреЗ рд╣реИрдВ: j рдФрд░ k (1 тЙд j, N
s , 1 тЙд k
t N
t )ред
рдЖрдЙрдЯрдкреБрдЯ рд╕реНрд╡рд░реВрдк
рдЧреНрд░рдВрдереЛрдВ рдореЗрдВ рдХреНрд░рдорд╢рдГ рд╕реВрдЪрдХ рдЬрдореНрдореВ рдФрд░ рдХрд╢реНрдореАрд░ рдХреЗ рд╕рд╛рде рд╡рд╛рдХреНрдпреЛрдВ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╕рдорд╛рдирд╛рдВрддрд░ рд╣реИрдВ (рдЕрд░реНрдерд╛рдд, рд╡реЗ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдПрдХ рдЪрд░рдг рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдХреНрд╖рдп рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ)ред
рдпрджрд┐ рдкреВрд░реНрдг рддреНрд░реБрдЯрд┐ 10
-4 рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдкрдХрд╛ рдЙрддреНрддрд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЙрджрд╛рд╣рд░рдг 1
рдЙрджрд╛рд╣рд░рдг 2
рдЙрджрд╛рд╣рд░рдг 3
рдиреЛрдЯ
рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрдиреБрдХреНрд░рдо рдХреЛ рддреАрди рддрд░реАрдХреЛрдВ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
тАв рдкрд╣рд▓реЗ, рдкреНрд░рд╛рдпрд┐рдХрддрд╛ p
d рдХреЗ рд╕рд╛рде рдореВрд▓ рдкрд╛рда рдореЗрдВ рдПрдХ рд╡рд╛рдХреНрдп рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдлрд┐рд░ рдкреНрд░рд╛рдпрд┐рдХрддрд╛ p рдХреЗ рд╕рд╛рде
рдореИрдВ рдЕрдиреБрд╡рд╛рдж рдореЗрдВ рдПрдХ рд╡рд╛рдХреНрдп рдЬреЛрдбрд╝рддрд╛
рд╣реВрдВ , рдлрд┐рд░ рдкреНрд░рд╛рдпрд┐рдХрддрд╛ p
h рдХреЗ рд╕рд╛рде рдЬрдирд░реЗрд╢рди рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛
рд╣реВрдВ ред
рдЗрд╕ рдШрдЯрдирд╛ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ P
1 = p
d * P
s (4) * p
i * P
t (20) * p
h рд╣реИ ред
тАв рдкрд╣рд▓реЗ, рдкреНрд░рд╛рдпрд┐рдХрддрд╛ p
d рдХреЗ рд╕рд╛рде рдореВрд▓ рдкрд╛рда рдореЗрдВ рдПрдХ рд╡рд╛рдХреНрдп рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдлрд┐рд░ рдкреНрд░рд╛рдпрд┐рдХрддрд╛ p рдХреЗ рд╕рд╛рде
рдореИрдВ рдЕрдиреБрд╡рд╛рдж рдореЗрдВ рдПрдХ рд╡рд╛рдХреНрдп рдЬреЛрдбрд╝рддрд╛
рд╣реВрдВ , рдлрд┐рд░ рдкреНрд░рд╛рдпрд┐рдХрддрд╛ p
h рдХреЗ рд╕рд╛рде рдЬрдирд░реЗрд╢рди рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛
рд╣реВрдВ ред
рдЗрд╕ рдШрдЯрдирд╛ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ P
2 = p
i * P
t (20) * p
d * P
s (4) * p
h рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред
тАв рд╕рдВрднрд╛рд╡реНрдпрддрд╛ рдХреЗ рд╕рд╛рде (1 - p
h - p
d - p
i ) рджреЛ рд╡рд╛рдХреНрдп рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рд╛рдпрд┐рдХрддрд╛ рдХреЗ рд╕рд╛рде (1 - p
рд╡рд┐рднрд╛рдЬрди s - p
рд╡рд┐рднрд╛рдЬрди t ) рд╕рдм рдХреБрдЫ рдЫреЛрдбрд╝ рджреЗрдВ рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рд╣реИ (рдЕрд░реНрдерд╛рдд рдореВрд▓ рдпрд╛ рдЕрдиреБрд╡рд╛рдж рдХреЛ рджреЛ рд╡рд╛рдХреНрдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рди рдХрд░реЗрдВред ) рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдкреНрд░рд╛рдпрд┐рдХрддрд╛ p
h рдкреАрдврд╝реА рдХреЛ рдЦрддреНрдо рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рдШрдЯрдирд╛ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ

ред
рдирддреАрдЬрддрди, рдЬрд╡рд╛рдм рдХреЗ рд░реВрдк рдореЗрдВ рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ

ред
рдирд┐рд░реНрдгрдп
рдХрд╛рд░реНрдп рдЫрд┐рдкреЗ рд╣реБрдП рдорд╛рд░реНрдХреЛрд╡ рдореЙрдбрд▓ (HMM рд╕рдВрд░реЗрдЦрдг) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрд░реЗрдЦрдг рдХрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рд╣реИред рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рдореЙрдбрд▓ рдФрд░
рдЖрдЧреЗ рдХреЗ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреА рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЬреЛрдбрд╝реА рдмрдирд╛рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреА рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд░рд╛рдЬреНрдп рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЙрдкрд╕рд░реНрдЧреЛрдВ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рд╣реИред рддрджрдиреБрд╕рд╛рд░, рд╕рдорд╛рдирд╛рдВрддрд░ рд╡рд╛рдХреНрдпреЛрдВ рдХреА рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЬреЛрдбрд╝реА рдХреЗ рд╕рдВрд░реЗрдЦрдг рдХреА рдЖрд╡рд╢реНрдпрдХ рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ
рдЖрдЧреЗ-рдкреАрдЫреЗ рдХреА рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рджреНрд╡рд╛рд░рд╛ рдЧрдгрдирд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред
рдХреЛрдб #include <iostream> #include <iomanip> #include <cmath> #include <vector> double p_h, p_d, p_i, p_tr, p_ss, p_st, mu_s, sigma_s, mu_t, sigma_t; double lognorm_cdf(double x, double mu, double sigma) { if (x < 1e-9) return 0.0; double res = std::log(x) - mu; res /= std::sqrt(2.0) * sigma; res = 0.5 * (1 + std::erf(res)); return res; } double length_probability(int l, double mu, double sigma) { return lognorm_cdf(l, mu, sigma) - lognorm_cdf(l - 1, mu, sigma); } double translation_probability(int ls, int lt) { double res = length_probability(ls, mu_s, sigma_s); double mu = mu_t - mu_s + std::log(ls); double sigma = std::sqrt(sigma_t * sigma_t - sigma_s * sigma_s); res *= length_probability(lt, mu, sigma); return res; } double split_probability(int l1, int l2, double mu, double sigma) { int l_sum = l1 + l2; double total_prob = 0.0; for (int i = 1; i < l_sum; ++i) { total_prob += length_probability(i, mu, sigma) * length_probability(l_sum - i, mu, sigma); } return length_probability(l1, mu, sigma) * length_probability(l2, mu, sigma) / total_prob; } double log_prob10(int ls) { return std::log(p_d * length_probability(ls, mu_s, sigma_s)); } double log_prob01(int lt) { return std::log(p_i * length_probability(lt, mu_t, sigma_t)); } double log_prob11(int ls, int lt) { return std::log(p_tr * (1 - p_ss - p_st) * translation_probability(ls, lt)); } double log_prob21(int ls1, int ls2, int lt) { return std::log(p_tr * p_ss * split_probability(ls1, ls2, mu_s, sigma_s) * translation_probability(ls1 + ls2 - 1, lt)); } double log_prob12(int ls, int lt1, int lt2) { return std::log(p_tr * p_st * split_probability(lt1, lt2, mu_t, sigma_t) * translation_probability(ls, lt1 + lt2 - 1)); } double logsum(double v1, double v2) { double res = std::max(v1, v2); v1 -= res; v2 -= res; v1 = std::min(v1, v2); if (v1 < -30) { return res; } return res + std::log(std::exp(v1) + 1.0); } double loginc(double* to, double from) { *to = logsum(*to, from); } constexpr double INF = 1e25; int main(void) { using std::cin; using std::cout; cin >> p_h >> p_d >> p_i >> p_ss >> p_st >> mu_s >> sigma_s >> mu_t >> sigma_t; p_tr = 1.0 - p_h - p_d - p_i; int Ns, Nt; cin >> Ns >> Nt; using std::vector; vector<int> ls(Ns), lt(Nt); for (int i = 0; i < Ns; ++i) cin >> ls[i]; for (int i = 0; i < Nt; ++i) cin >> lt[i]; vector< vector< double> > fwd(Ns + 1, vector<double>(Nt + 1, -INF)), bwd = fwd; fwd[0][0] = 0; bwd[Ns][Nt] = 0; for (int i = 0; i <= Ns; ++i) { for (int j = 0; j <= Nt; ++j) { if (i >= 1) { loginc(&fwd[i][j], fwd[i - 1][j] + log_prob10(ls[i - 1])); loginc(&bwd[Ns - i][Nt - j], bwd[Ns - i + 1][Nt - j] + log_prob10(ls[Ns - i])); } if (j >= 1) { loginc(&fwd[i][j], fwd[i][j - 1] + log_prob01(lt[j - 1])); loginc(&bwd[Ns - i][Nt - j], bwd[Ns - i][Nt - j + 1] + log_prob01(lt[Nt - j])); } if (i >= 1 && j >= 1) { loginc(&fwd[i][j], fwd[i - 1][j - 1] + log_prob11(ls[i - 1], lt[j - 1])); loginc(&bwd[Ns - i][Nt - j], bwd[Ns - i + 1][Nt - j + 1] + log_prob11(ls[Ns - i], lt[Nt - j])); } if (i >= 2 && j >= 1) { loginc(&fwd[i][j], fwd[i - 2][j - 1] + log_prob21(ls[i - 1], ls[i - 2], lt[j - 1])); loginc(&bwd[Ns - i][Nt - j], bwd[Ns - i + 2][Nt - j + 1] + log_prob21(ls[Ns - i], ls[Ns - i + 1], lt[Nt - j])); } if (i >= 1 && j >= 2) { loginc(&fwd[i][j], fwd[i - 1][j - 2] + log_prob12(ls[i - 1], lt[j - 1], lt[j - 2])); loginc(&bwd[Ns - i][Nt - j], bwd[Ns - i + 1][Nt - j + 2] + log_prob12(ls[Ns - i], lt[Nt - j], lt[Nt - j + 1])); } } } int j, k; cin >> j >> k; double rlog = fwd[j - 1][k - 1] + bwd[j][k] + log_prob11(ls[j - 1], lt[k - 1]) - bwd[0][0]; cout << std::fixed << std::setprecision(12) << std::exp(rlog) << std::endl; }
D. рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХрд╛ рдЯреЗрдк
рд╢рд░реНрдд
рд╡рд┐рд╖рдо рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП рд╕реБрдЭрд╛рд╡реЛрдВ рдХреА рдПрдХ рдлрд╝реАрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдпрд╣ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ (рдЪрд┐рддреНрд░, рд╡реАрдбрд┐рдпреЛ, рд╕рдорд╛рдЪрд╛рд░, рдЖрджрд┐) рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдорд┐рд▓рд╛рддрд╛ рд╣реИред рдЗрди рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЖрдорддреМрд░ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрджреЗрд╢ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ (рджрд┐рд▓рдЪрд╕реНрдк) рд╡рд╕реНрддреБ, рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд╢реАрд░реНрд╖ рдХреЗ рдХрд░реАрдмред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рддрд░рд╣ рдХреЗ рдЖрджреЗрд╢ рдХреЗ рд╕рд╛рде, рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рдЕрдХреНрд╕рд░ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреА рдХрдИ рд╡рд╕реНрддреБрдПрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИрдВред рдпрд╣ рд╣рдорд╛рд░реА рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХреА рдмрд╛рд╣рд░реА рд╡рд┐рд╡рд┐рдзрддрд╛ рдХреЛ рдмрд╣реБрдд рдЦрд░рд╛рдм рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕реЗ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЬреЛ рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдПрдХ рдирдИ рд╕реВрдЪреА рдмрдирд╛рдПрдЧрд╛ рдЬреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдореБрдХреНрдд рд╣реЛрдЧрд╛ рдФрд░ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реЛрдЧрд╛ред
рдЕрдиреБрд╢рдВрд╕рд╛рдУрдВ рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реВрдЪреА рдХреЛ = [a
0 , a, ...,
n - 1 ] рдХреА рд▓рдВрдмрд╛рдИ n> 0. рджреА рдЧрдИ рд╣реИред рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╕реНрддреБ I рдореЗрдВ рд╕рдВрдЦреНрдпрд╛ b
i 0 {0, ..., m - 1} рдХреЗ рд╕рд╛рде рдЯрд╛рдЗрдк рд╣реИред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рд╕рдВрдЦреНрдпрд╛ I рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ r (a) = 2
underi рд╣реИ ред рдЙрд╕ рд╕реВрдЪреА рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬреЛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдПрдХ рд╕реЗ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рд╕рдмрд╕реЗрдЯ рдЪреБрдирдХрд░ рдЙрдиреНрд╣реЗрдВ рдкреБрди: рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░ рд░рд╣реА рд╣реИ: x = [a
0 ,
i 1 , ...,
i i - 1 ] рд▓рдВрдмрд╛рдИ k (0 тЙд k тЙд n)ред рдПрдХ рд╕реВрдЪреА рдХреЛ рд╕реНрд╡реАрдХрд╛рд░реНрдп рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдЗрд╕рдореЗрдВ рдХреЛрдИ рджреЛ рд▓рдЧрд╛рддрд╛рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд, b
i j 1 b
i j + 1 рд╕рднреА j = 0, ..., k - 2 рдХреЗ рд▓рд┐рдПред рд╕реВрдЪреА рдХреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдХреА рдЧрдгрдирд╛ рд╕реВрддреНрд░ рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛рддреА рд╣реИ
ред рдЖрдкрдХреЛ рд╕рднреА рдорд╛рдиреНрдп рдХреЗ рдмреАрдЪ рдЕрдзрд┐рдХрддрдо рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рд╕реВрдЪреА рдвреВрдВрдврдиреА рд╣реЛрдЧреАред
I / O рдкреНрд░рд╛рд░реВрдк рдФрд░ рдЙрджрд╛рд╣рд░рдгрдЗрдирдкреБрдЯ рдкреНрд░рд╛рд░реВрдк
рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдкрд░, рд╕рдВрдЦреНрдпрд╛ n рдФрд░ m рдПрдХ рд╕реНрдерд╛рди рдХреЗ рд╕рд╛рде рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ (1 тЙд n тЙд 100000, 1) m the n)ред рдЕрдЧрд▓реА n рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ i = 0, ..., n - 1 (0
i b
i ) m - 1) рдХреЗ рд▓рд┐рдП рд╕рдВрдЦреНрдпрд╛рдПрдБ b рд╣реИрдВред
рдЖрдЙрдЯрдкреБрдЯ рд╕реНрд╡рд░реВрдк
рдПрдХ рд╕реНрдерд╛рди рдХреЗ рд╕рд╛рде, рдЕрдВрддрд┐рдо рд╕реВрдЪреА рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛: i
0 , i
1 , ..., i
k - 1 рд▓рд┐рдЦрд┐рдПред
рдЙрджрд╛рд╣рд░рдг 1
рдЙрджрд╛рд╣рд░рдг 2
рдЙрджрд╛рд╣рд░рдг 3
рдирд┐рд░реНрдгрдп
рд╕рд░рд▓ рдЧрдгрд┐рддреАрдп рдЧрдгрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдпрд╣ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреЛ "рд▓рд╛рд▓рдЪреА" рджреГрд╖реНрдЯрд┐рдХреЛрдг рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХреА рдЗрд╖реНрдЯрддрдо рд╕реВрдЪреА рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдЖрдЗрдЯрдо рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╡рд╕реНрддреБ рд╣реИ рдЬреЛ рд╕реВрдЪреА рдХреА рдПрдХ рд╣реА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдорд╛рдиреНрдп рд╣реИред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рд░рд▓ рд╣реИ: рд╣рдо рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдЙрдиреНрд╣реЗрдВ рдЙрддреНрддрд░ рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдЬрдм рдХреЛрдИ рдЕрдорд╛рдиреНрдп рд╡рд╕реНрддреБ рд╕рд╛рдордиреЗ рдЖрддреА рд╣реИ (рдЬрд┐рд╕рдХрд╛ рдкреНрд░рдХрд╛рд░ рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ), рддреЛ рд╣рдо рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рдХрддрд╛рд░ рдореЗрдВ рд░рдЦ рджреЗрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдБ рд╕реЗ рд╣рдо рдЗрд╕реЗ рдЬрд▓реНрдж рд╕реЗ рдЬрд▓реНрдж рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╕рдордп рдкрд░ рд╣рд░ рдкрд▓, рдЗрд╕ рдХрддрд╛рд░ рдореЗрдВ рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдорд┐рд▓рд╛рди рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛ред рдЕрдВрдд рдореЗрдВ, рдХрдИ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрддрд╛рд░ рдореЗрдВ рд░рд╣ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
std::vector<int> blend(int n, int m, const std::vector<int>& types) { std::vector<int> result; std::queue<int> repeated; for (int i = 0; i < n; ++i) { if (result.empty() || types[result.back()] != types[i]) { result.push_back(i); if (!repeated.empty() && types[repeated.front()] != types[result.back()]) { result.push_back(repeated.front()); repeated.pop(); } } else { repeated.push(i); } } return result; }
рдбреАред рдЪрд░рд┐рддреНрд░ рдЕрдиреБрдХреНрд░рдореЛрдВ рдХрд╛ рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ
рдПрдХ рдкрд░рд┐рдорд┐рдд рд╡рд░реНрдгрдорд╛рд▓рд╛ A = {a
1 , a,
2 , ...,
K - 1 ,
K = S}, рдПрдХ
i , {a, b, ..., z}, S рд╣реИ рдЬреЛ рд░реЗрдЦрд╛ рдХрд╛ рдЕрдВрдд рд╣реИред
рд╡рд░реНрдгрдорд╛рд▓рд╛ A рдкрд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рддрд╛рд░ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдирд┐рдореНрди рд╡рд┐рдзрд┐ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
1. рдкрд╣рд▓рд╛ рд╡рд░реНрдг x
1 рд╡рд┐рддрд░рдг P (x
1 = a
i ) = q
i (рдпрд╣ рдЬреНрдЮрд╛рдд рд╣реИ рдХрд┐ q
K = 0) рдХреЗ рд╕рд╛рде рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЪрд░ рд╣реИред
2. рдкреНрд░рддреНрдпреЗрдХ рдЕрдЧрд▓рд╛ рд╡рд░реНрдг рд╕рд╢рд░реНрдд рд╡рд┐рддрд░рдг P рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ (x
i = a
j || x
i - 1 = a
l ) = p
jl ред
3. рдпрджрд┐ x
i = S, рдкреАрдврд╝реА рдмрдВрдж рд╣реЛ рдЬрд╛рддреА рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдо x
1 x
2 ... x
i - 1 рд╣реИ ред
рд╡рд┐рднрд┐рдиреНрди рдорд╛рдкрджрдВрдбреЛрдВ рд╡рд╛рд▓реЗ рджреЛ рд╡рд░реНрдгрд┐рдд рдореЙрдбрд▓ рдХреЗ рдорд┐рд╢реНрд░рдг рд╕реЗ рдЙрддреНрдкрдиреНрди рд▓рд╛рдЗрдиреЛрдВ рдХрд╛ рд╕реЗрдЯ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рд╡рд╣ рдЙрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХ рджреЗ рдЬрд┐рд╕рд╕реЗ рд╡рд╣ рдЙрддреНрдкрдиреНрди рд╣реБрдИ рдереАред
I / O рдкреНрд░рд╛рд░реВрдк, рдЙрджрд╛рд╣рд░рдг рдФрд░ рдиреЛрдЯреНрд╕рдЗрдирдкреБрдЯ рдкреНрд░рд╛рд░реВрдк
рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рджреЛ рд╕рдВрдЦреНрдпрд╛рдПрдБ 1000 тЙд N 3 2000 рдФрд░ 3 тЙд K the 27 рд╣реИрдВ - рдХреНрд░рдорд╢рдГ рд▓рд╛рдЗрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рд╡рд░реНрдгрдорд╛рд▓рд╛ рдХрд╛ рдЖрдХрд╛рд░ред
рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ рдореЗрдВ K - 1 рд▓реИрдЯрд┐рди рд╡рд░реНрдгрдорд╛рд▓рд╛ рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдирд┐рдЪрд▓реЗ рдЕрдХреНрд╖рд░реЛрдВ рд╕реЗ рдорд┐рд▓рдХрд░ рдПрдХ рд░реЗрдЦрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рд╡рд░реНрдгрдорд╛рд▓рд╛ рдХреЗ рдкрд╣рд▓реЗ K - 1 рддрддреНрд╡реЛрдВ рдХреЛ рджрд░реНрд╢рд╛рддреА рд╣реИред
рдирд┐рдореНрди рдПрди рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред
рдЖрдЙрдЯрдкреБрдЯ рд╕реНрд╡рд░реВрдк
рдПрди рд▓рд╛рдЗрдиреЛрдВ, i-th рд▓рд╛рдЗрди рдореЗрдВ рдЗрдирдкреБрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЗ i + 1-th рд▓рд╛рдЗрди рдкрд░ рдЕрдиреБрдХреНрд░рдо рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╕реНрдЯрд░ рд╕рдВрдЦреНрдпрд╛ (0/1) рд╢рд╛рдорд┐рд▓ рд╣реИред рд╕рд╣реА рдЙрддреНрддрд░ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЧ рдХрдо рд╕реЗ рдХрдо 80% рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЙрджрд╛рд╣рд░рдг
рдиреЛрдЯ
рд╕реНрдерд┐рддрд┐ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ: рдЗрд╕рдореЗрдВ рдкрд╣рд▓реЗ 50 рд▓рд╛рдЗрдиреЗрдВ рд╡рд┐рддрд░рдг рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВ
P (x
i = a! X
i - 1 = a) = 0.5, P (x
i = S | x
i - 1 = a) = 0.5, P (x
1 = a) = 1; рджреВрд╕рд░рд╛ 50 - рд╡рд┐рддрд░рдг рд╕реЗ
P (x
i = b | x
i - 1 = b) = 0.5, P (x
i = S | x
i - 1 = b) = 0.5, P (x
1 = b) = 1 |
рдирд┐рд░реНрдгрдп
рд╕рдорд╕реНрдпрд╛
рдИрдПрдо рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд▓ рдХреА рдЧрдИ
рд╣реИ : рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рд╕реНрддреБрдд рдирдореВрдирд╛ рджреЛ рдорд╛рд░реНрдХреЛрд╡ рд╢реНрд░реГрдВрдЦрд▓рд╛рдУрдВ рдХреЗ рдорд┐рд╢реНрд░рдг рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рдирдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рджреМрд░рд╛рди рдмрд╣рд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред 80% рд╕рд╣реА рдЙрддреНрддрд░реЛрдВ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддрд╛рдХрд┐ рд╕рдорд╛рдзрд╛рди рдХреА рд╢реБрджреНрдзрддрд╛ рдЙрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рди рд╣реЛ рдЬреЛ рджреЛрдиреЛрдВ рд╢реНрд░реГрдВрдЦрд▓рд╛рдУрдВ рдореЗрдВ рдЙрдЪреНрдЪ рд╕рдВрднрд╛рд╡рдирд╛ рд░рдЦрддреЗ рд╣реИрдВред рдЗрди рдЙрджрд╛рд╣рд░рдгреЛрдВ, рдЗрд╕рд▓рд┐рдП, рдЬрдм рдареАрдХ рд╕реЗ рдмрд╣рд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рд╕реМрдВрдкрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЙрддреНрдкрдиреНрди рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЧрд▓рдд рд╣реИред
import random import math EPS = 1e-9 def empty_row(size): return [0] * size def empty_matrix(rows, cols): return [empty_row(cols) for _ in range(rows)] def normalized_row(row): row_sum = sum(row) + EPS return [x / row_sum for x in row] def normalized_matrix(mtx): return [normalized_row(r) for r in mtx] def restore_params(alphabet, string_samples): n_tokens = len(alphabet) n_samples = len(string_samples) samples = [tuple([alphabet.index(token) for token in s] + [n_tokens - 1, n_tokens - 1]) for s in string_samples] probs = [random.random() for _ in range(n_samples)] for _ in range(200): old_probs = [x for x in probs]
.