рд▓рд╛рд▓рдЪреА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдФрд░ рд╕реНрд▓реЙрдЯ рдорд╢реАрдиред рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЪреИрдореНрдкрд┐рдпрдирд╢рд┐рдк рдХреЗ рдПрдордПрд▓-рдЯреНрд░реИрдХ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг



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

A. рдЯрд╛рдЗрдкреЛ


рд╢рд░реНрдд

рд╕рднреА рднрд╛рд╖рд╛рдПрдБpython2.7 + рд╕реБрдиреНрдиpython3.5 + рд╕реБрдиреНрди
рд╕рдордп рд╕реАрдорд╛1 рдПрд╕5 рдПрд╕5 рдПрд╕
рдореЗрдореЛрд░реА рдХреА рд╕реАрдорд╛64 рдПрдордмреА256 рдПрдордмреА256 рдПрдордмреА
рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдорд╛рдирдХ рдЗрдирдкреБрдЯ рдпрд╛ input.txt
рдирд┐рд╖реНрдХрд░реНрд╖рдорд╛рдирдХ рдЙрддреНрдкрд╛рджрди рдпрд╛ output.txt
(рдПрдкреАрдЧреНрд░рд╛рдл) (рдПрдХ рдордВрдЪ рд╕реЗ)
- рдЗрд╕ рдмрдХрд╡рд╛рд╕ рдХреА рд░рдЪрдирд╛ рдХрд┐рд╕рдиреЗ рдХреА?
- рдПрд╕реНрдЯреНрд░реЛрдлрд┐рдЬрд┐рд╕рд┐рд╕реНрдЯред рд╡реЗ рд▓реЛрдЧ рднреА рд╣реИрдВред
- рдЖрдкрдиреЗ "рдкрддреНрд░рдХрд╛рд░" рд╢рдмреНрдж рдореЗрдВ 10 рдЧрд▓рддрд┐рдпрд╛рдБ рдХреА рд╣реИрдВред

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

рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ, рдорд╛рди рд▓реЗрдВ рдХрд┐ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдореЙрдбрд▓ рд╣реЛрддрд╛ рд╣реИ: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрд╕ рд╢рдмреНрдж рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╡рд╣ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдмрд╛рдж рдореЗрдВ рдЗрд╕рдореЗрдВ рдХрдИ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдХрд░рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдЧрд▓рддреА рджреВрд╕рд░реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд▓рд┐рдП рд╢рдмреНрдж рдХреЗ рдХреБрдЫ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХрд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╣реИред рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗрд╡рд▓ рдПрдХ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ (рдЕрд░реНрдерд╛рдд, рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд┐рдпрдо "abc" тЖТ "cba" рджреНрд╡рд╛рд░рд╛ рдПрдХ рд╣реА рддреНрд░реБрдЯрд┐ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ "abcabc" рд╕реЗ рд╡рд╣ рдпрд╛ рддреЛ "cbaabc рдпрд╛" abccba ") рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд╛рдж, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджреЛрд╣рд░рд╛рддреА рд╣реИред рдПрдХ рд╣реА рдирд┐рдпрдо рдХреЛ рдХрдИ рдмрд╛рд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪрд░рдгреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, "cbacba" рдХреЛ рджреЛ рдЪрд░рдгреЛрдВ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред

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

I / O рдкреНрд░рд╛рд░реВрдк рдФрд░ рдЙрджрд╛рд╣рд░рдг

рдЗрдирдкреБрдЯ рдкреНрд░рд╛рд░реВрдк


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

рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╡рд╣ рд╢рдмреНрдж рд╣реИ рдЬреЛ рдЙрд╕рдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рд┐рдЦрд╛ рдерд╛ (рдЗрд╕рдореЗрдВ рдирд┐рдЪрд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд▓реИрдЯрд┐рди рд╡рд░реНрдгрдорд╛рд▓рд╛ рдХреЗ рдЕрдХреНрд╖рд░ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рд▓рдВрдмрд╛рдИ 20 рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИ)ред

рддреАрд╕рд░реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рдПрдХ рдПрдХрд▓ рд╕рдВрдЦреНрдпрд╛ N (N <50) рд╣реИ - рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреА рд╕рдВрдЦреНрдпрд╛ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИред

рдЕрдЧрд▓реА рдПрди рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдкреНрд░рд╛рд░реВрдк рдФрд░ рд▓реЗрдлреНрдЯрд┐рдиреЗрдВрдЯ "рд╕рд╣реА" рдЕрдХреНрд╖рд░ рдЕрдиреБрдХреНрд░рдо & gt <рд╕реНрдерд╛рди> <"рдЧрд▓рдд" рдЕрдиреБрдХреНрд░рдо рдЕрдиреБрдХреНрд░рдо> рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЕрдиреБрдХреНрд░рдо 6 рд╡рд░реНрдгреЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рд▓рдВрдмреЗ рдирд╣реАрдВ рд╣реИрдВред

рдЖрдЙрдЯрдкреБрдЯ рд╕реНрд╡рд░реВрдк


рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬреЛ рдиреНрдпреВрдирддрдо рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рд╕рдВрдЦреНрдпрд╛ 4 рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ рдпрд╛ рдПрдХ рд╢рдмреНрдж, рдкреНрд░рд┐рдВрдЯ -1 рд╕реЗ рджреВрд╕рд░реЗ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред

рдЙрджрд╛рд╣рд░рдг

рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдирд┐рд╖реНрдХрд░реНрд╖
mlax
drum
50
lr
mlax gtwt
md
mlax ujoc
ml pq
mf
ml bf
mlax aruq
mlax nqdd
mlax fglm
mlax bfit
mlax mziq
mla hlb
au
mlax vmpa
mw
aw
ax ok
mla kqf
me
xx
ml if
ml gk
le
mla xrh
mj
ac
ab
mq
ax fr
ml sb
mlax gxxx
xm
mlax hczx
lq
la sv
lg
ax eh
lax mjh
la ec
la pv
ml iq
aq
lax jrs
la qn
lax bjo
lo
az
ln
ac
4

рдирд┐рд░реНрдгрдп


рдЖрдЗрдП 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. рдХрдИ-рд╣рдерд┐рдпрд╛рд░рдмрдВрдж рдбрд╛рдХреВ


рд╢рд░реНрдд

рд╕рдордп рд╕реАрдорд╛2 рдПрд╕
рдореЗрдореЛрд░реА рдХреА рд╕реАрдорд╛64 рдПрдордмреА
рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдорд╛рдирдХ рдЗрдирдкреБрдЯ
рдирд┐рд╖реНрдХрд░реНрд╖рдорд╛рдирдХ рдЙрддреНрдкрд╛рджрди
рдпрд╣ рдПрдХ рд╕рдВрд╡рд╛рджрд╛рддреНрдордХ рдХрд╛рд░реНрдп рд╣реИред

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

рдЖрдк рдЕрдкрдиреА рдЕрдкреЗрдХреНрд╖рд┐рдд рдЬреАрдд рдХреЛ рдЕрдзрд┐рдХрддрдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

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 # [random.betavariate(self.alpha, self.beta) for _ in range(self.n)] self._bs = [init_b] * self.n # [random.betavariate(self.alpha, self.beta) for _ in range(self.n)] self.last_move = -1 random.seed(int(time.time())) def move(self): samples = [random.betavariate(self._as[x], self._bs[x]) for x in range(self.n)] self.last_move = max(range(self.n), key=lambda x: samples[x]) self.moves.append(self.last_move) return self.last_move def set_reward(self, reward): i = self.last_move r = reward self._as[i] += r self._bs[i] += (1 - r) return i, r while True: n, m = map(int, sys.stdin.readline().split()) if n == 0 and m == 0: break alpha, beta = map(float, sys.stdin.readline().split()) solver = ThompsonSampling(m) for _ in range(n): print >> sys.stdout, solver.move() + 1 sys.stdout.flush() reward = int(sys.stdin.readline()) solver.set_reward(reward) 

C. рд╡рд╛рдХреНрдпреЛрдВ рдХрд╛ рд╕рдВрд░реЗрдЦрдг


рд╢рд░реНрдд

рд╕рдордп рд╕реАрдорд╛2 рдПрд╕
рдореЗрдореЛрд░реА рдХреА рд╕реАрдорд╛64 рдПрдордмреА
рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдорд╛рдирдХ рдЗрдирдкреБрдЯ рдпрд╛ input.txt
рдирд┐рд╖реНрдХрд░реНрд╖рдорд╛рдирдХ рдЙрддреНрдкрд╛рджрди рдпрд╛ output.txt
рдПрдХ рдЕрдЪреНрдЫреА рдорд╢реАрди рдЕрдиреБрд╡рд╛рдж рдореЙрдбрд▓ рдХреЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕рдорд╛рдирд╛рдВрддрд░ рдорд╛рдорд▓реЛрдВ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдорд╛рдорд▓рд╛ рд╣реИред рдЖрдорддреМрд░ рдкрд░, рд╕рдорд╛рдирд╛рдВрддрд░ рдСрдлрд╝рд░ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рд╕рдорд╛рдирд╛рдВрддрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╣реИрдВред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЕрдХреНрд╕рд░ рд╕рдорд╛рдирд╛рдВрддрд░ рд╡рд╛рдХреНрдпреЛрдВ рдХрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдХреЛрд╖ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрдирдХреА рд▓рдВрдмрд╛рдИ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рднреА рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЖрдк рдиреЛрдЯрд┐рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕реНрд░реЛрдд рднрд╛рд╖рд╛ рдореЗрдВ рдЬрд┐рддрдиреА рд▓рдВрдмреА рдЕрд╡рдзрд┐ рд╣реЛрдЧреА, рдЙрддрдиреЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЗрд╕рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗрдЧрд╛ред рдХреБрдЫ рдХрдард┐рдирд╛рдИ рдЗрд╕ рддрдереНрдп рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ рдХрд┐ рдЕрдиреБрд╡рд╛рдж рдХреЗ рджреМрд░рд╛рди рдкрд╛рда рдореЗрдВ рд╡рд╛рдХреНрдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрджрд▓ рд╕рдХрддреА рд╣реИ: рдХрднреА-рдХрднреА рдЕрдиреБрд╡рд╛рдж рдореЗрдВ рджреЛ рдЖрд╕рдиреНрди рд╡рд╛рдХреНрдпреЛрдВ рдХреЛ рдПрдХ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд - рдПрдХ рд╡рд╛рдХреНрдп рдХреЛ рджреЛ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреБрдЫ рджреБрд░реНрд▓рдн рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╡рд╛рдХреНрдпреЛрдВ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрд╡рд╛рдж рдореЗрдВ рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдЕрдиреБрд╡рд╛рдж рдореЗрдВ рдРрд╕рд╛ рдЕрдиреБрд╡рд╛рдж рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдореВрд▓ рдореЗрдВ рдирд╣реАрдВ рдерд╛ред

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

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

рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдирд┐рд╖реНрдХрд░реНрд╖
0.05 0.08 0.07 0.15 0.1 1 0.3 3 0.5
1 1
4
20
1 1
0.975037457809

рдЙрджрд╛рд╣рд░рдг 2

рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдирд┐рд╖реНрдХрд░реНрд╖
0.1 0.2 0.3 0.25 0.3 1 0.3 3 0.5
2 1
3 4
20
2 1
0.247705779810

рдЙрджрд╛рд╣рд░рдг 3

рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдирд┐рд╖реНрдХрд░реНрд╖
0.2 0.2 0.2 0.3 0.3 3 0.3 1 1
5 3
16 35 24 19 23
5 6 7
2 1
0.200961101684

рдиреЛрдЯ


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

тАв рдкрд╣рд▓реЗ, рдкреНрд░рд╛рдпрд┐рдХрддрд╛ 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. рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХрд╛ рдЯреЗрдк


рд╢рд░реНрдд

рд╕рдордп рд╕реАрдорд╛2 рдПрд╕
рдореЗрдореЛрд░реА рдХреА рд╕реАрдорд╛64 рдПрдордмреА
рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдорд╛рдирдХ рдЗрдирдкреБрдЯ рдпрд╛ input.txt
рдирд┐рд╖реНрдХрд░реНрд╖рдорд╛рдирдХ рдЙрддреНрдкрд╛рджрди рдпрд╛ output.txt
рд╡рд┐рд╖рдо рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП рд╕реБрдЭрд╛рд╡реЛрдВ рдХреА рдПрдХ рдлрд╝реАрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдпрд╣ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ (рдЪрд┐рддреНрд░, рд╡реАрдбрд┐рдпреЛ, рд╕рдорд╛рдЪрд╛рд░, рдЖрджрд┐) рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдорд┐рд▓рд╛рддрд╛ рд╣реИред рдЗрди рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЖрдорддреМрд░ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрджреЗрд╢ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ (рджрд┐рд▓рдЪрд╕реНрдк) рд╡рд╕реНрддреБ, рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд╢реАрд░реНрд╖ рдХреЗ рдХрд░реАрдмред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рддрд░рд╣ рдХреЗ рдЖрджреЗрд╢ рдХреЗ рд╕рд╛рде, рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рдЕрдХреНрд╕рд░ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреА рдХрдИ рд╡рд╕реНрддреБрдПрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИрдВред рдпрд╣ рд╣рдорд╛рд░реА рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХреА рдмрд╛рд╣рд░реА рд╡рд┐рд╡рд┐рдзрддрд╛ рдХреЛ рдмрд╣реБрдд рдЦрд░рд╛рдм рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕реЗ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЬреЛ рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдПрдХ рдирдИ рд╕реВрдЪреА рдмрдирд╛рдПрдЧрд╛ рдЬреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдореБрдХреНрдд рд╣реЛрдЧрд╛ рдФрд░ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реЛрдЧрд╛ред

рдЕрдиреБрд╢рдВрд╕рд╛рдУрдВ рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реВрдЪреА рдХреЛ = [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 рдХреЗ рд▓рд┐рдПред рд╕реВрдЪреА рдХреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдХреА рдЧрдгрдирд╛ рд╕реВрддреНрд░ рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛рддреА рд╣реИ  sumj=0kтИТ12тИТjr(aij)ред рдЖрдкрдХреЛ рд╕рднреА рдорд╛рдиреНрдп рдХреЗ рдмреАрдЪ рдЕрдзрд┐рдХрддрдо рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рд╕реВрдЪреА рдвреВрдВрдврдиреА рд╣реЛрдЧреАред

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

рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдирд┐рд╖реНрдХрд░реНрд╖
1 1
0
0

рдЙрджрд╛рд╣рд░рдг 2

рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдирд┐рд╖реНрдХрд░реНрд╖
2 2
1
1
0

рдЙрджрд╛рд╣рд░рдг 3

рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдирд┐рд╖реНрдХрд░реНрд╖
10 2
1
1
1
0
0
1
0
1
1
1
0 3 1 4 2 6 5

рдирд┐рд░реНрдгрдп


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

  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; } 

рдбреАред рдЪрд░рд┐рддреНрд░ рдЕрдиреБрдХреНрд░рдореЛрдВ рдХрд╛ рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ

рд╕рднреА рднрд╛рд╖рд╛рдПрдБpython2.7 + рд╕реБрдиреНрдиpython3.5 + рд╕реБрдиреНрди
рд╕рдордп рд╕реАрдорд╛1 рдПрд╕6 рдПрд╕6 рдПрд╕
рдореЗрдореЛрд░реА рдХреА рд╕реАрдорд╛64 рдПрдордмреА64 рдПрдордмреА64 рдПрдордмреА
рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдорд╛рдирдХ рдЗрдирдкреБрдЯ рдпрд╛ input.txt
рдирд┐рд╖реНрдХрд░реНрд╖рдорд╛рдирдХ рдЙрддреНрдкрд╛рджрди рдпрд╛ output.txt
рдПрдХ рдкрд░рд┐рдорд┐рдд рд╡рд░реНрдгрдорд╛рд▓рд╛ 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% рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЙрджрд╛рд╣рд░рдг

рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдирд┐рд╖реНрдХрд░реНрд╖
100 3
a
a
aa
a
aaa
a
aaaaaa
aa
a
a
a
aaa
a
a
aaa
aa
aaaa
aaa
a
aaaaa
aa
a
aaaa
a
a
a
a
a
a
aa
aaaa
aaa
a
aa
aaaa
a
a
a
a
a
a
a
a
a
a
aa
aaa
aaa
a
a
bbb
bb
bb
bbbbbbb
bb
bbb
b
bbbbbbb
bbbb
bbb
bb
bbb
bb
bb
bbb
bbbbbb
bbb
b
bbbbbb
b
bbbbb
b
b
bb
b
bb
bb
b
b
b
b
bb
bb
bb
b
b
b
bb
b
bbb
bb
b
bbbbbb
b
bb
bb
bb
b
bb
bbb
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1

рдиреЛрдЯ


рд╕реНрдерд┐рддрд┐ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ: рдЗрд╕рдореЗрдВ рдкрд╣рд▓реЗ 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] # probs fixed p0, A = empty_row(n_tokens), empty_matrix(n_tokens, n_tokens) q0, B = empty_row(n_tokens), empty_matrix(n_tokens, n_tokens) for prob, sample in zip(probs, samples): p0[sample[0]] += prob q0[sample[0]] += 1 - prob for t1, t2 in zip(sample[:-1], sample[1:]): A[t1][t2] += prob B[t1][t2] += 1 - prob A, p0 = normalized_matrix(A), normalized_row(p0) B, q0 = normalized_matrix(B), normalized_row(q0) trans_log_diff = [ [math.log(b + EPS) - math.log(a + EPS) for b, a in zip(B_r, A_r)] for B_r, A_r in zip(B, A) ] # A, p0, B, q0 fixed probs = empty_row(n_samples) for i, sample in enumerate(samples): value = math.log(q0[sample[0]] + EPS) - math.log(p0[sample[0]] + EPS) for t1, t2 in zip(sample[:-1], sample[1:]): value += trans_log_diff[t1][t2] probs[i] = 1.0 / (1.0 + math.exp(value)) if max(abs(x - y) for x, y in zip(probs, old_probs)) < 1e-9: break return [int(x > 0.5) for x in probs] def main(): N, K = list(map(int, input().split())) string_samples = [] alphabet = list(input().strip()) + [''] for _ in range(N): string_samples.append(input().rstrip()) result = restore_params(alphabet, string_samples) for r in result: print(r) if __name__ == '__main__': main() 



.

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


All Articles