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

рд╣реЛрд░рд╛рдм рдХреЗ рдореЛрдмрд╛рдЗрд▓ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдкрд╛рда рдореЗрдВ рд╕реВрддреНрд░ рдирд╣реАрдВ рджрд┐рдЦрд╛рдП рдЬрд╛ рд╕рдХрддреЗ (рд╕рднреА рдореЛрдмрд╛рдЗрд▓ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдирд╣реАрдВ) - рдпрджрд┐ рдЖрдк рд╕реВрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдБ рджреЗрдЦрддреЗ рд╣реИрдВ рддреЛ рдкреВрд░реНрдг рд╕рдВрд╕реНрдХрд░рдг рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдореЛрдмрд╛рдЗрд▓ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рдЦреЗрд▓ рдХреЗ рдирд┐рдпрдо
рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдХреНрд░реЙрд╕рд╡рд░реНрдб рдХреИрдирд╡рд╛рд╕ рд╕рдлреЗрдж рд╣реИред рд╡реЗрдирд┐рд▓рд╛ рдХрд╛рд▓реЗ рдФрд░ рд╕рдлреЗрдж рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХрд╛рд▓реЗ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд╕реНрдерд╛рди рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдХрд╛рд▓реЗ рдФрд░ рд╕рдлреЗрдж рд╡рд░реНрдЧ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ (рдХреИрдирд╡рд╛рд╕ рдХреЗ рдмрд╛рдИрдВ рдУрд░) рдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрддрдВрдн (рдХреИрдирд╡рд╛рд╕ рдХреЗ рдКрдкрд░) рдХреЗ рд▓рд┐рдП рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╕рдВрдмрдВрдзрд┐рдд рдкрдВрдХреНрддрд┐ рдпрд╛ рд╕реНрддрдВрдн рдореЗрдВ рдХрд╛рд▓реА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдХрд┐рддрдиреЗ рд╕рдореВрд╣ рд╣реИрдВ, рдФрд░ рд╕рдВрдЦреНрдпрд╛рдПрдБ рд╕реНрд╡рдпрдВ рдмрддрд╛рддреА рд╣реИрдВ рдХрд┐ рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рдореВрд╣ рдореЗрдВ рдХрд┐рддрдиреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕реЗрд▓ рд╣реИрдВред рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рд╕реЗрдЯ [ рей , реи , рел ] рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╕реЗ рддреАрди рд▓рдЧрд╛рддрд╛рд░ рд╕рдореВрд╣ рд╣реИрдВ 3 ред 2 рдФрд░ 5 рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдХрд╛рд▓реА рдХреЛрд╢рд┐рдХрд╛рдПрдБред рд╕рдореВрд╣реЛрдВ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╕рд╛рдкреЗрдХреНрд╖ рдХреНрд░рдо рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд┐рдП рдмрд┐рдирд╛ (рд╕рдВрдЦреНрдпрд╛ рдЙрдирдХреА рд▓рдВрдмрд╛рдИ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреА рд╣реИ, рдФрд░ рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП), рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╕рдлреЗрдж рд╕реЗрд▓ рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

рдЧрд▓рдд рдиреЙрдиреЛрдЧреНрд░рд╛рдо рдПрдХрдорд╛рддреНрд░ рд╕рдорд╛рдзрд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╣рд▓ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рдСрд░реЗрдВрдЬ рдиреЗ "рдЕрд╕рдВрдЧрдд" рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рд▓реЗрдмрд▓ рдХрд┐рдпрд╛ред рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ред
рдЗрд╕ рдкреНрд░рддрд┐рдмрдВрдз рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ - рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬрд╛рдкрд╛рдиреА рдХреНрд░реЙрд╕рд╡рд░реНрдб рдкрд╣реЗрд▓реА рдПрдХ рдПрдирдкреА-рдкреВрд░реНрдг рд╕рдорд╕реНрдпрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рдПрдирдкреА-рдкреВрд░реНрдг рдХрд╛рд░реНрдп рдирд╣реАрдВ рдмрди рдЬрд╛рддрд╛ рд╣реИ, рдЕрдЧрд░ рдХреЛрдИ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╣реИ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рд╕рдордп рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдЧреЗ рдХреМрди рд╕реЗ рд╕реЗрд▓ рдЦреБрд▓рдиреЗ рд╣реИрдВред рдордиреБрд╖реНрдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рднреА рдХреНрд░реЙрд╕рд╡рд░реНрдб рдкрд╣реЗрд▓рд┐рдпрд╛рдБ (рд╡рд┐рдзрд┐ рдХреЛ рдЫреЛрдбрд╝рдХрд░) рдореЛрдВрдЯреЗ рдХрд╛рд░реНрд▓реЛ рдкрд░реАрдХреНрд╖рдг рдФрд░ рддреНрд░реБрдЯрд┐) рдЗрд╕ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВред
рдЕрдзрд┐рдХрд╛рдВрд╢ рд░реВрдврд╝рд┐рд╡рд╛рджреА рдХреНрд░реЙрд╕рд╡рд░реНрдб рдкрд╣реЗрд▓рд┐рдпрд╛рдБ 5 рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдКрдВрдЪрд╛рдЗрдпреЛрдВ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛрддреА рд╣реИрдВ, рдРрд╕реА рдХреЛрдИ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рддреБрд░рдВрдд рдЧрд┐рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рд╡реЗ рдЬрд╣рд╛рдВ рд░рдВрдЧреАрди рдХреЛрд╢рд┐рдХрд╛рдПрдВ рд╕рднреА рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рд░реЛрдХ рджреЗрддреА рд╣реИрдВ, рдпрд╛ рд╡реЗ рд╕рднреА рдЬрдЧрд╣ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВ), рдФрд░ рдкреВрд░рдХ рд░рдВрдЧреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реАрдорд┐рдд рд╣реИред рдЗрди рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЧрд▓рдд рдХреНрд░реЙрд╕рд╡рд░реНрдб рдкрд╣реЗрд▓реА:
|1 1| --+---+ 1| | 1| | --+---+
рдЕрдХреНрд╕рд░, рдПрдиреНрдХреЛрдбреЗрдб рдкрд┐рдХреНрд╕реЗрд▓ рдЖрд░реНрдЯ, рдЬреЛ рдПрдХ рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рдЪреЗрдХрдмреЛрд░реНрдб" рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдкреАрдЫреЗ рдХреА рддрд░рдл рд╣рд▓ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рдмреЗрд╣рддрд░ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдЦреЛрдЬ рдореЗрдВ "рдкрд┐рдХреНрд╕реЗрд▓рдЖрд░реНрдЯ рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ" рдЯрд╛рдЗрдк рдХрд░рддреЗ рд╣реИрдВред рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рдЗрд╕ 2x2 рдлреЗрдпреЗрд▓ рдХреНрд░реЙрд╕рд╡рд░реНрдб рдХреА рддрд░рд╣ рд╣реА рд╣реИред
рд╕рдВрднрд╡ рд╕рдорд╛рдзрд╛рди
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрд░реЙрд╕рд╡рд░реНрдб рдкрд╣реЗрд▓реА рдХрд╛ рдЖрдХрд╛рд░, рд░рдВрдЧреЛрдВ рдФрд░ рд╕рднреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдФрд░ рд╕реНрддрдВрднреЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг рд╣реИред рдореИрдВ рдЗрд╕ рд╕реЗ рдПрдХ рдЪрд┐рддреНрд░ рдХреИрд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ:
рдкреВрд░реНрдг рдЦреЛрдЬ
рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд▓ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рднреА рд╕рдВрднрд╡ рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реЙрд░реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рдВрддреЛрд╖рдЬрдирдХ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рдХрд╛рд▓реЗ рдФрд░ рд╕рдлреЗрдж рдХреНрд░реЙрд╕рд╡рд░реНрдб рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреА рдЬрдЯрд┐рд▓рддрд╛ O ( N тИЧ M тИЧ 2 N тИЧ M ) , рд░рдВрдЧ рдХреЗ рд▓рд┐рдП рд╣реЗ ( рдПрди * рдПрдо * рдЧ рдУ рдПрд▓ рдУ рдЖрд░ рдПрди * рдПрдо ) ред рдЬреЛрдХрд░ рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕рд╛рджреГрд╢реНрдп рджреНрд╡рд╛рд░рд╛ , рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЛ рдЬреЛрдХрд░ рднреА рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЖрдХрд╛рд░ 5x5 рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИред
рдмреИрдХ рдЯреНрд░реИрдХрд┐рдВрдЧ
рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдХреНрд╖реИрддрд┐рдЬ рд╕рдореВрд╣реЛрдВ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЗ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рддрд░реАрдХреЛрдВ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдо рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд░рдЦрддреЗ рд╣реИрдВ, рдпрд╣ рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдпрд╣ рдХреЙрд▓рдо рд╕рдореВрд╣реЛрдВ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рдирд╣реАрдВ рддреЛрдбрд╝рддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо 1 рд╕реЗрд▓ рдкрд░ рдЖрдЧреЗ рд░рдЦрддреЗ рд╣реИрдВ, рд╣рдо рдлрд┐рд░ рд╕реЗ рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВред рд╕реЗрдЯ рдХрд░реЗрдВ - рдЕрдЧрд▓реЗ рд╕рдореВрд╣ рдкрд░ рдЬрд╛рдПрдВред рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдПрдХ рд╕рдореВрд╣ рдирд╣реАрдВ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рджреЛ рд╕рдореВрд╣реЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рд▓рд╛рддреЗ рд╣реИрдВ, рдкрд┐рдЫрд▓реЗ рд╕рдореВрд╣ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЬрдм рддрдХ рдХрд┐ рд╣рдо рдЕрдВрддрд┐рдо рд╕рдореВрд╣ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдирд╣реАрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВред
рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╕реЗ
рдпрд╣ рдирд┐рд░реНрдгрдп рдмрд╣реБрдд рдмреЗрд╣рддрд░ рд╣реИ рдФрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд╣реА рд╣реИред рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓рдо рдХрд╛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдЕрдзрд┐рдХрддрдо рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рдХрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдЧреАред
рдкрдВрдХреНрддрд┐ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рд╕реАрдЦрддрд╛ рд╣реИ - рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕реЗрд▓ рдХреЛ рдХреБрдЫ рд░рдВрдЧ рдореЗрдВ рд░рдВрдЧрдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ, рд╕рдореВрд╣ рдЕрднрд┐рд╕рд░рдг рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдЖрдк рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрдВрдХреНрддрд┐ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рд▓реЗрдХрд┐рди рдкреНрд░рд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рдХрдИ рдХреЙрд▓рдореЛрдВ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ "рдорджрдж" рдХрд░реЗрдЧреА, рдФрд░ рдЬрдм рд╣рдо рдЙрдирдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗ, рддреЛ рд╡реЗ рдлрд┐рд░ рд╕реЗ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ "рдорджрдж" рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдХрдИ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдЬрдм рддрдХ рдХрд┐ рд╕рднреА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рдПрдХ рд╕рдВрднрд╡ рд░рдВрдЧ рди рд╣реЛред
рд╕рдЪ рдореЗрдВ рд╕рд╣реА рдлреИрд╕рд▓рд╛
рдПрдХ рдкрдВрдХреНрддрд┐, рджреЛ рд░рдВрдЧ
рдмреНрд▓реИрдХ-рдПрдВрдб-рд╡реНрд╣рд╛рдЗрдЯ "рд╕рд┐рдВрдЧрд▓-рд▓рд╛рдЗрди" рдХрд╛ рдкреНрд░рднрд╛рд╡реА рдЕрдиреБрдорд╛рди, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕реЗрд▓ рдкрд╣рд▓реЗ рд╣реА рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рдЪреБрдХреЗ рд╣реИрдВ, рдПрдХ рдмрд╣реБрдд рд╣реА рдХрдард┐рди рдХрд╛рдо рд╣реИред рд╡рд╣ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдорд┐рд▓реЗ:
- ACM ICPC 2006 рдХрд╛ рдХреНрд╡рд╛рд░реНрдЯрд░ рдлрд╛рдЗрдирд▓ - рдЖрдк рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕реНрд╡рдпрдВ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рд╕рдордп рд╕реАрдорд╛ 1 рд╕реЗрдХрдВрдб рд╣реИ, рд╕рдореВрд╣реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рд╕реАрдорд╛ 400 рд╣реИ, рдФрд░ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рд▓рдВрдмрд╛рдИ рднреА 400 рд╣реИред рдЗрд╕рдореЗрдВ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЬрдЯрд┐рд▓рддрд╛ рдХрд╛ рд╕реНрддрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИред
- рдЗрдВрдЯрд░рдиреЗрд╢рдирд▓ рдУрд▓рдВрдкрд┐рдпрд╛рдб рдЗрдирдлреЙрд░реНрдореЗрдЯрд┐рдХреНрд╕ 2016 - рдХрд╛рд░реНрдп рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рд╢рд░реНрдд ред рд╕рдордп рд╕реАрдорд╛ 2 рд╕реЗрдХрдВрдб рд╣реИ, рд╕рдореВрд╣реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рд╕реАрдорд╛ 100 рд╣реИ, рдкрдВрдХреНрддрд┐ рдХреА рд▓рдВрдмрд╛рдИ 200'000 рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреА рд╕реАрдорд╛рдПрдВ рдУрд╡рд░рдХрд┐рд▓ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрд╕реАрдПрдо рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ 80/100 рдЕрдВрдХ рд╣рд╛рд╕рд┐рд▓ рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рднреА, рд╕реНрддрд░ рдиреЗ рдирд┐рд░рд╛рд╢ рдирд╣реАрдВ рдХрд┐рдпрд╛, рджреБрдирд┐рдпрд╛ рднрд░ рдХреЗ рд╕реНрдХреВрд▓реА рдмрдЪреНрдЪреЛрдВ рдиреЗ рдПрдХ рдХреНрд░реВрд░ рдмреБрджреНрдзрд┐ рд╕реНрддрд░ рдХреЗ рд╕рд╛рде рд╡рд┐рднрд┐рдиреНрди рдЪрд╛рд▓реЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд▓рд┐рдпрд╛ рд╣реИ, рдлрд┐рд░ рд╡реЗ рдЗрд╕ рдУрд▓рдВрдкрд┐рдпрд╛рдб рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ (рджреЗрд╢ рд╕реЗ рдХреЗрд╡рд▓ 4 рд▓реЛрдЧреЛрдВ рдХреЛ рдкрд╛рд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП), рд╡реЗ 5 рдШрдВрдЯреЗ рдХреЗ 2 рджреМрд░ рддрдп рдХрд░рддреЗ рд╣реИрдВ
рдФрд░ рдорд╣рд╛рдХрд╛рд╡реНрдп рдЬреАрдд рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ (600 рдореЗрдВ рд╕реЗ 138-240 рдЕрдВрдХ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдХрд╛рдВрд╕реНрдп), рдСрдХреНрд╕рдлрд╝реЛрд░реНрдб рдореЗрдВ рдкреНрд░рд╡реЗрд╢, рдлрд┐рд░ рд╕реНрдкрд╖реНрдЯ рдХрдВрдкрдирд┐рдпреЛрдВ рд╕реЗ рдЦреЛрдЬ рд╡рд┐рднрд╛рдЧ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдПрдХ рд▓рдВрдмрд╛ рдФрд░ рд╕реБрдЦреА рдЬреАрд╡рди dakimakura рдХреЗ рд╕рд╛рде рдЧрд▓реЗ рд▓рдЧрд╛ рд▓рд┐рдпрд╛ред
рдореЛрдиреЛрдХреНрд░реЛрдо рд╕рд┐рдВрдЧрд▓-рд▓рд╛рдЗрди рдХреЛ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рднреА рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдУ ( рдПрди тИЧ 2 рдПрди ) (рд╕рднреА рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдЧрдгрдирд╛, рд╢реБрджреНрдзрддрд╛ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ, рд╕рднреА рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕рдорд╛рди рд░рдВрдЧ рд╡рд╛рд▓реА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛), рдФрд░ рдХрд┐рд╕реА рддрд░рд╣ рдХрдо рдмреЗрд╡рдХреВрдл рд╣реЛрдирд╛ред
рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рдмреИрдХрдЯреНрд░реИрдХрд┐рдВрдЧ рдХреЗ рдПрдирд╛рд▓реЙрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЧрдгрдирд╛ рдХреЗ рдмрд┐рдирд╛ред рдпрджрд┐ рд╣рдо рдХрд┐рд╕реА рддрд░рд╣ рдХрдИ рд╕рдореВрд╣ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрдм рдХрд┐рд╕реА рддрд░рд╣ рдХреЗ рд╕реЗрд▓ рдореЗрдВ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рд╡рд░реНрддрдорд╛рди рд╕реЗрд▓ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░ рд╢реЗрд╖ рд╕рдореВрд╣ рдХреЛ рд░рдЦрдирд╛ рд╕рдВрднрд╡ рд╣реИред
рдЫрджреНрдо рдХреЛрдб def EpicWin(group, cell): if cell >= last_cell:
рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдбрд╛рдпрдиреЗрдорд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдЫрджреНрдо рдХреЛрдб рдХреЛ рд╕рд░рд▓реАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЧрдгрдирд╛ рдХрд┐рдП рдЧрдП рдорд╛рди рднреА рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рд╣реИрдВред
CanInsertBlack/CanInsertWhite
рдХреЛ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╕рд╣реА рдЬрдЧрд╣ рдкрд░ рд╕рд╣реА рдЖрдХрд╛рд░ рдХреЗ рд╕рдореВрд╣ рдХреЛ рд░рдЦрдирд╛ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рд╕рдВрднрд╡ рд╣реИред рдЙрди рд╕рднреА рдХреЛ рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрдХреЗрддрд┐рдд рд╕реЗрд▓ рд╢реНрд░реЗрдгреА рдореЗрдВ рдХреЛрдИ "100% рд╕рдлреЗрдж" рд╕реЗрд▓ рдирд╣реАрдВ рд╣реИ (рдкрд╣рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП) рдпрд╛ "100% рдХрд╛рд▓рд╛" (рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП)ред рдЗрд╕рд▓рд┐рдП рд╡реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдУ ( 1 ) , рдпрд╣ рдЖрдВрд╢рд┐рдХ рдорд╛рддреНрд░рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
CanInsertBlack white_counter = [ 0, 0, ..., 0 ]
рдЖрдВрд╢рд┐рдХ рд░рдХрдо рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдЯреЛрдирд╛ рдлрд╛рд░реНрдо рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИ
can_place_black[cell .. (cell + len[group] - 1)] = True
рдпрд╣рд╛рдБ рд╣рдо рез рдХреЗ рдмрдЬрд╛рдп рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВред рез / рдпрд╛ рдпрджрд┐ рд╣рдореЗрдВ рдХрд┐рд╕реА рд╕реЗрдЧрдореЗрдВрдЯ рдореЗрдВ рдмрд╣реБрдд рд╕реА рдЬреЛрдбрд╝рд┐рдпрд╛рдБ рдмрдирд╛рдиреА рд╣реИрдВ 'рдореЙрдбреНрдпреВрд▓ рдЬреЛрдбрд╝реЗрдВ рд╡рд┐рдЬреНрдЮрд╛рдкрди рд╕рдХреНрд░рд┐рдп рдирд╣реАрдВ рд╣реИ рдг реА , рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╣рдо рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рд╡рд░реНрдзрди рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕ рд╕рд░рдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ (рд╡реЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХрд╛рд░реНрдп "рдСрдлрд╝рд▓рд╛рдЗрди рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ"), рдлрд┐рд░ рд▓реВрдк рдХреЗ рдмрдЬрд╛рдп:
рдЖрдк рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкреВрд░рд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ O ( k тИЧ n ) рдЬрд╣рд╛рдБ рдХрд╢реНрдореАрд░ - рдХрд╛рд▓реА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд╕рдореВрд╣реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛, рдП рдПрди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рд▓рдВрдмрд╛рдИ рд╣реИред рдФрд░ рд╣рдо ACM ICPC рдХреЗ рд╕реЗрдореАрдлрд╛рдЗрдирд▓ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ рдпрд╛ рдЗрдВрдЯрд░реНрдирд╢рд┐рдк рдХрд╛ рдХрд╛рдВрд╕реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред ACM рд╕рдорд╛рдзрд╛рди (рдЬрд╛рд╡рд╛) ред IOI рд╕рдорд╛рдзрд╛рди (C ++) ред
рдПрдХ рд▓рд╛рдЗрди, рдХрдИ рд░рдВрдЧ
рдЬрдм рд╣рдо рдмрд╣реБ-рд░рдВрдЧ рдиреЙрдиреЛрдЧреНрд░рд╛рдо рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЕрднреА рднреА рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП, рддреЛ рд╣рдо рдПрдХ рднрдпрд╛рдирдХ рд╕рдЪреНрдЪрд╛рдИ рд╕реАрдЦрддреЗ рд╣реИрдВ - рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╣рд░ рдХреЙрд▓рдо рдЬрд╛рджреБрдИ рд░реВрдк рд╕реЗ рд╕рднреА рдХреЙрд▓рдореЛрдВ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрддрд╛ рд╣реИ! рдпрд╣ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реИ:
рд╕реНрд░реЛрдд - рдЬрд╛рдкрд╛рдиреА рд╡рд░реНрдЧ рдкрд╣реЗрд▓реА рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ
рдЬрдмрдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рджреЛ-рд░рдВрдЧ рдХреЗ рдЧреИрд░ -реЛрдЧреНрд░рд╛рдо рдиреЗ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдХрд┐рдпрд╛, рдЙрдиреНрд╣реЗрдВ рдСрд░реНрдереЛрдЧреЛрдирд▓ рджреЛрд╕реНрддреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рджреЗрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереАред
рдЪрд┐рддреНрд░ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдмрд╛рдПрдВ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рддреАрди рдЪрд░рдо рджрд╛рдПрдВ рдХреЛрд╢рд┐рдХрд╛рдПрдВ рдЦрд╛рд▓реА рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рдЖрдк рдЗрди рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рд░рдВрдЧ рджреЗрддреЗ рд╣реИрдВ рддреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИ рд╡реЗ рд░рдВрдЧ рдЬрд┐рдирдореЗрдВ рдЦреБрдж рдХреЛ рд░рдВрдЧрдирд╛ рд╣реИ рдЧреИрд░-рд╕рдлреЗрдж рд░рдВрдЧред
рд▓реЗрдХрд┐рди рдпрд╣ рдордЬрд╛рдХ рдЧрдгрд┐рддреАрдп рд░реВрдк рд╕реЗ рдирд┐рд░реНрдгрд╛рдпрдХ рд╣реИ - рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд▓ рдХреЛ рдПрдХ рдирдВрдмрд░ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд╣рд╛рдВ рдо рдВ рдВ ith рдмрд┐рдЯ рдХрд╛ рдорддрд▓рдм рд╣реЛрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╕реЗрд▓ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдо рдВ рдВ рдз рд░рдВрдЧред рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рд╕рднреА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХрд╛ рдПрдХ рдореВрд▓реНрдп рд╣реЛрддрд╛ рд╣реИ 2 рд╡рд┐рдЬреНрдЮрд╛рдкрди рд╕рдХреНрд░рд┐рдп рдирд╣реАрдВ рд╣реИ рдВ рдЧ - 1 ред рдЧрддрд┐рдХреА рдХрд╛ рдирд┐рд░реНрдгрдп рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд╣реАрдВ рдмрджрд▓реЗрдЧрд╛ред
рдЖрдк рдирд┐рдореНрди рдкреНрд░рднрд╛рд╡ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рд╕рдорд╛рди рдмрд╛рдПрдВ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╕рдмрд╕реЗ рджрд╛рдИрдВ рдУрд░ рдХреА рд╕реЗрд▓ рдореЗрдВ рдиреАрд▓реЗ рдпрд╛ рд╕рдлреЗрдж рд░рдВрдЧ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдХреЙрд▓рдо рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЗрд╕ рд╕реЗрд▓ рдореЗрдВ рдпрд╛ рддреЛ рд╣рд░рд╛ рдпрд╛ рд╕рдлреЗрдж рд░рдВрдЧ рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рдЬреНрдЮрд╛рди рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЗрд╕ рд╕реЗрд▓ рдореЗрдВ рдХреЗрд╡рд▓ рд╕рдлреЗрдж рд░рдВрдЧ рд╣реЛрдЧрд╛ред рдФрд░ рдлрд┐рд░ рд╣рдо рдЙрддреНрддрд░ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред
рдпрджрд┐ рд╣рдо рд╢реВрдиреНрдп рдмрд┐рдЯ "рд╡реНрд╣рд╛рдЗрдЯ", рдкрд╣рд▓рд╛ "рдмреНрд▓реВ", рджреВрд╕рд░рд╛ "рдЧреНрд░реАрди" рдорд╛рдирддреЗ рд╣реИрдВ, рддреЛ рд▓рд╛рдЗрди рдиреЗ рдЕрдВрддрд┐рдо рд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рд░рд╛рдЬреНрдп рдХреА рдЧрдгрдирд╛ рдХреА 011 , рдФрд░ рдХреЙрд▓рдо 101 ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЗрд╕ рд╕реЗрд▓ рдХреА рд╕реНрдерд┐рддрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣реИ 011 \ & 101 = 001
рдХрдИ рд▓рд╛рдЗрдиреЗрдВ, рдХрдИ рд░рдВрдЧ
рдЕрдВрддрд┐рдо рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕рднреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдФрд░ рд╕реНрддрдВрднреЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рд▓рдЧрд╛рддрд╛рд░ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛, рдЬрдм рддрдХ рдХрд┐ рдПрдХ рдмрд┐рдЯ рд╕реЗ рдЕрдзрд┐рдХ рдПрдХ рдПрдХрд▓ рдХрдХреНрд╖ рди рд╣реЛред рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдореЗрдВ, рд╕рднреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдФрд░ рд╕реНрддрдВрднреЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЖрдкрд╕реА рдФрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрди рд╕рднреА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВред
рдкрд╣рд▓рд╛ рдкрд░рд┐рдгрд╛рдо
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдордиреЗ рдХрдардлреЛрдбрд╝рд╡рд╛ рдХреА рддрд░рд╣ рдХреЛрдб рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рд╣реИ, рдпрд╛рдиреА рд╣рдо рд╕рдВрджрд░реНрдн рд╕реЗ рдЧреБрдЬрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЧрд▓рддреА рд╕реЗ рдХрд╣реАрдВ рднреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдХреЙрдкреА рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдХрд╣реАрдВ рднреА рд╕рд╛рдЗрдХрд┐рд▓ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рд╕рд╛рдЗрдХрд┐рд▓ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдмрд┐рдЯ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рд╣рдо __builtin_popcount
рдФрд░ __builtin_ctz
( gcc рдлреАрдЪрд░реНрд╕ ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╕рдм рдХреБрдЫ рд╕рд╛рдл рд╣реИред
рдЖрдЗрдП рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕рдордп рдХреЛ рджреЗрдЦреЗрдВ, рдЬреЛ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдкрд╣реЗрд▓реА рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЙрд╕ рдорд╢реАрди рдХреЗ рдлрд╛рдпрджреЛрдВ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдпрд╣ рд╕рдм рд▓рд┐рдЦрд╛ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
рдореЗрд░реА 1932 рд╣рд╛рд░реНрд▓реЗ рдбреЗрд╡рд┐рдбрд╕рди рдореЙрдбрд▓ рдмреА рдХреНрд▓рд╛рд╕рд┐рдХ рдореЛрдЯрд░рд╕рд╛рдЗрдХрд┐рд▓ рдХреЗ рд▓рд┐рдП рдЗрдВрдЬрди рд╡рд┐рдирд┐рд░реНрджреЗрд╢ RAM - 4GB - AMD E1-2500, 1400MHz L1 - 128KiB, 1GHz L2 - 1MiB, 1GHz - 2, - 2 ┬л SoC ┬╗ 2013 28
рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕реБрдкрд░ рдХрдВрдкреНрдпреВрдЯрд░ рдХреЛ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдкрд░ рдЕрдиреБрдХреВрд▓рди рдПрдХ рдЙрдбрд╝рд╛рди рд╢реИрддрд╛рди рдорд╢реАрди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡ рдбрд╛рд▓рддреЗ рд╣реИрдВред
рдЗрд╕рд▓рд┐рдП, рд╕рдмрд╕реЗ рдЬрдЯрд┐рд▓ рдХреНрд░реЙрд╕рд╡рд░реНрдб рдкрд╣реЗрд▓реА (рдиреЙрдиреЛрдЧреНрд░рд╛рдореНрд╕ 12 рдХреЗ рдЕрдиреБрд╕рд╛рд░) рдкрд░ рд╣рдорд╛рд░реЗ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ - 47 рд╕реЗ 60 рд╕реЗрдХрдВрдб (рдЗрд╕рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдФрд░ рд╕рдорд╛рдзрд╛рди рд╕реЗ рдкрдврд╝рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ)ред рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╕рд╛рдЗрдЯ рдкрд░ "рдЬрдЯрд┐рд▓рддрд╛" рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЧрдгрдирд╛ рдХреА рдЧрдИ рдереА - рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕рднреА рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдПрдХ рд╣реА рдХреНрд░реЙрд╕рд╡рд░реНрдб рдкрд╣реЗрд▓реА рднреА рд╕рдмрд╕реЗ рдХрдард┐рди рдереА, рд╕рдВрдЧреНрд░рд╣ рдХреА рд░рд╛рдп рдореЗрдВ рдЕрдиреНрдп рд╕рдмрд╕реЗ рдЬрдЯрд┐рд▓ рд╡рд░реНрдЧ рдкрд╣реЗрд▓реА рд╢реАрд░реНрд╖ рд╕рдордп рдореЗрдВ рд░рдЦреА рдЧрдИ рдереАрдВред
рд░рдВрдЧ рдХреНрд░реЙрд╕рд╡рд░реНрдб рдирдВрдмрд░ 9596, рд╕рдмрд╕реЗ рдмрдбрд╝реА рдХрдард┐рдирд╛рдИ рддреНрд╡рд░рд┐рдд рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдмрдирд╛рдИ рдЧрдИ рдереАред рдЙрд╕рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ 4683 рд░рдВрдЧреАрди рдХреНрд░реЙрд╕рд╡рд░реНрдб ( 10906 рд╕реЗ ) рдФрд░ 1406 рдмреНрд▓реИрдХ рдПрдВрдб рд╡реНрд╣рд╛рдЗрдЯ ( 8293 рд╕реЗ ) рдХреЛ nonograms.ru (рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдпрд╣ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдиреЙрдиреЛрдЧреНрд░рд╛рдо рдЕрднрд┐рд▓реЗрдЦрд╛рдЧрд╛рд░ рдореЗрдВ рд╕реЗ рдПрдХ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬрддрд╛ рд╣реВрдВ, рдЬрд┐рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕рдордЭрддрд╛ рд╣реИред рд╣рдо рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпреЗ рдХреНрд░реЙрд╕рд╡рд░реНрдб рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдирдореВрдирд╛ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдкрд░реНрдпрд╛рдкреНрдд рдФрд╕рдд рдорд╛рди рджрд┐рдЦрд╛рдПрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рдмрд╕реЗ "рдЬрдЯрд┐рд▓" рд╡рд░реНрдЧ рдкрд╣реЗрд▓реА рдХреЗ рджрд░реНрдЬрдиреЛрдВ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреА рд╕рдВрдЦреНрдпрд╛ (рдЖрдХрд╛рд░ рдореЗрдВ рд╕рдмрд╕реЗ рдмрдбрд╝реА рдФрд░ рд░рдВрдЧреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рднреА) рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХрд▓рдореЛрдВ рдХреЗ рд╕рд╛рде рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджрд░реНрдЬ рдХреА рдЧрдИ рдереАред

рдЕрдиреБрдХреВрд▓рди
рдпрд╣рд╛рдВ рдЖрдк рд╕рдВрднрд╛рд╡рд┐рдд рдЕрдиреБрдХреВрд▓рди рддрдХрдиреАрдХреЛрдВ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдкреВрд░реЗ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд▓реЗрдЦрди рдХреЗ рджреМрд░рд╛рди (1) рдмрдирд╛рдИ рдЧрдИ рдереАрдВ, (2) рдХрд╛рдо рдХреЗ рд╕рдордп рдХреЛ рдЖрдзрд╛ рдорд┐рдирдЯ рд╕реЗ рджреВрд╕рд░реЗ рдХреЗ рдПрдХ рдЕрдВрд╢ рддрдХ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, (3) рдЙрди рдЕрдиреБрдХреВрд▓рди рдЬреЛ рдЖрдЧреЗ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рдордп
- рдмрд┐рдЯ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░реНрдп, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ
__builtin_popcount
рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рд╕рдВрдХреЗрддрди рдореЗрдВ рдЗрдХрд╛рдЗрдпреЛрдВ рдХреА рдЧрд┐рдирддреА рдХреЗ рд▓рд┐рдП, рдФрд░ __builtin_ctz
рдкрд╣рд▓реЗ рд╕рдмрд╕реЗ рдЫреЛрдЯреА рдЗрдХрд╛рдИ рд╕реЗ рдкрд╣рд▓реЗ рд╢реВрдиреНрдп рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдПред рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдп рдХреБрдЫ рд╕рдВрдХрд▓рдХ рдореЗрдВ рдирд╣реАрдВ рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП, рдРрд╕реЗ рдПрдирд╛рд▓реЙрдЧ рдЙрдкрдпреБрдХреНрдд рд╣реИрдВ:
рд╡рд┐рдВрдбреЛрдЬ рдкреЙрдкрдХрд╛рдЙрдВрдЯ #ifdef _MSC_VER # include <intrin.h> # define __builtin_popcount __popcnt #endif
- рдПрд░реЗ рд╕рдВрдЧрдарди - рдПрдХ рдЫреЛрдЯрд╛ рдЖрдХрд╛рд░ рдкрд╣рд▓реЗ рдЖрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд░рдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ [2] [рей] [релрежреж] [резрежреиреж] рдХреА рддреБрд▓рдирд╛ рдореЗрдВ [резрежреиреж] [релрежреж] [рей] [реи]ред
- рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрдб рдХреА рд╕рд╛рдорд╛рдиреНрдп рдкрд░реНрдпрд╛рдкреНрддрддрд╛ рдФрд░ рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЪрд┐рдВрддрд╛рдУрдВ рд╕реЗ рдмрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХреНрдпрд╛ рдХрд╛рдо рдХрд╛ рд╕рдордп рдХрдо рдХрд░рддрд╛ рд╣реИ
- рд╕рдВрдХрд▓рди рдХрд░рддреЗ рд╕рдордп -O2 рдзреНрд╡рдЬред
- рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рд▓ рдХреА рдЧрдИ рдкрдВрдХреНрддрд┐ / рдХреЙрд▓рдо рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд╣реАрдВ рдлреЗрдВрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЭрдВрдбреЗ рдХреЛ рдПрдХ рдЕрд▓рдЧ std :: рд╡реЗрдХреНрдЯрд░ / рд╕рд░рдгреА рдореЗрдВ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдПрдХ рдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рди рдЬрд╛рдиреЗ рджреЗрдВ рдпрджрд┐ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдХреБрдЫ рдирд╣реАрдВ рд╣реИред
- рдПрдХ рдЧрддрд┐рд╢реАрд▓ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╣реБ-рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╕рдорд╛рдзрд╛рди рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рд░рдгреА рдЬрд┐рд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА "рдЧрдгрдирд╛ рдХреА рдЧрдИ" рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЭрдВрдбреЗ рд╣реЛрддреЗ рд╣реИрдВ, рд╣рд░ рдмрд╛рд░ рдПрдХ рдирдпрд╛ рд╕рдорд╛рдзрд╛рди рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рд░реАрд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдПрдХ рджреЛ-рдЖрдпрд╛рдореА рд╕рд░рдгреА / рд╡реЗрдХреНрдЯрд░ рд╣реИ, рдЬрд╣рд╛рдВ рдкрд╣рд▓рд╛ рдЖрдпрд╛рдо рд╕рдореВрд╣реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рд╡рд░реНрддрдорд╛рди рд╕реЗрд▓ рд╣реИ (рдКрдкрд░ рдПрдкрд┐рдХрд╡рд┐рди рд╕реНрдпреВрдбреЛрдХреЛрдб рджреЗрдЦреЗрдВ, рдЬрд╣рд╛рдВ рдпрд╣ рд╕рд░рдгреА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рдЪрд╛рд░ рд╕реНрдкрд╖реНрдЯ рд╣реИ)ред рд╢реВрдиреНрдп рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рд╣рдорд╛рд░реЗ рдкрд╛рд╕ "рдЯрд╛рдЗрдорд░" рд╡реИрд░рд┐рдПрдмрд▓ рд╣реИ, рдФрд░ рд╕рд░рдгреА рдореЗрдВ рдЕрдВрддрд┐рдо "рд╕рдордп" рджрд┐рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ рдирдВрдмрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬрдм рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдЖрдЦрд┐рд░реА рдмрд╛рд░ рджреЗрдЦрд╛ рдЧрдпрд╛ рдерд╛ред рдПрдХ рдирдпрд╛ рдХрд╛рд░реНрдп рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп, "рдЯрд╛рдЗрдорд░" 1 рд╕реЗ рдмрдврд╝ рдЬрд╛рддрд╛ рд╣реИред рдмреВрд▓рд┐рдпрди рдзреНрд╡рдЬ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЖрдкрдХреЛ рд╕рд░рдгреА рддрддреНрд╡ рдФрд░ "рдЯрд╛рдЗрдорд░" рдХреА рд╕рдорд╛рдирддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡реА рд╣реИ, рдЬрд╣рд╛рдВ рд╕рднреА рд╕рдВрднрд╡ рд░рд╛рдЬреНрдпреЛрдВ рд╕реЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕рд░рдгреА рдХреЛ рд╢реВрдиреНрдп рдХрд░рдирд╛ "рдХреНрдпрд╛ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдерд╛" рд╕рдордп рдХрд╛ рдПрдХ рд╕реНрд╡рд╕реНрде рд╣рд┐рд╕реНрд╕рд╛ рд▓реЗрддрд╛ рд╣реИ)ред
- рдПрд╕рдЯреАрдПрд▓ рдпрд╛ рдЕрдзрд┐рдХ рдкрд░реНрдпрд╛рдкреНрдд рдЪреАрдЬреЛрдВ рдореЗрдВ рдПрдирд╛рд▓реЙрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ (рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ, рдЖрджрд┐ рдХреЗ рд╕рд╛рде рдЫреЛрд░реЛрдВ) рдХреЗ рд╕рд░рд▓ рд╕рдВрдЪрд╛рд▓рди рдХреА рдЬрдЧрд╣ред рдХрднреА-рдХрднреА рдпрд╣ рд╕рд╛рдЗрдХрд┐рд▓ рд╕реЗ рднреА рддреЗрдЬ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
std::vector<bool>
C ++ рдореЗрдВ рд╕рднреА рдмреВрд▓рд┐рдпрди рдорд╛рдиреЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмрд┐рдЯреНрд╕ рдореЗрдВ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдореЗрдВ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдереЛрдбрд╝рд╛ рдзреАрдореА рдкрд╣реБрдВрдЪ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЕрдЧрд░ рдпрд╣ рдкрддреЗ рдкрд░ рдПрдХ рдирд┐рдпрдорд┐рдд рдореВрд▓реНрдп рдерд╛ред рдпрджрд┐ рдХреЛрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдРрд╕реЗ рдорд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдмрд╣реБрдд рдмрд╛рд░, рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдмреВрд▓ рдХреА рдЬрдЧрд╣ рдкреНрд░рджрд░реНрд╢рди рдкрд░ рдЕрдЪреНрдЫрд╛ рдкреНрд░рднрд╛рд╡ рдбрд╛рд▓ рд╕рдХрддреА рд╣реИред- рдЕрдиреНрдп рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЛ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░реНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЦреЛрдЬрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдЦреБрдж Valgrind рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рд╡рд┐рд╢реНрд▓реЗрд╖рдг kCachegrind рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдХрдИ рдЖрдИрдбреАрдИ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рд╣реЛрддреЗ рд╣реИрдВред
рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдкрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпреЗ рд╕рдВрдкрд╛рджрди рдкрд░реНрдпрд╛рдкреНрдд рдереЗ:
рд░рдВрдЧреАрди рдиреЙрдиреЛрдЧреНрд░рд╛рдореНрд╕ izaron@izaron:~/nonograms/build$ ./nonograms_solver -x ../../nonogram/source2/ -e [2018-08-04 22:57:40.432] [Nonograms] [info] Starting a benchmark... [2018-08-04 22:58:03.820] [Nonograms] [info] Average time: 0.00497556, Median time: 0.00302781, Max time: 0.215925 [2018-08-04 22:58:03.820] [Nonograms] [info] Top 10 heaviest nonograms: [2018-08-04 22:58:03.820] [Nonograms] [info] 0.215925 seconds, file 9596 [2018-08-04 22:58:03.820] [Nonograms] [info] 0.164579 seconds, file 4462 [2018-08-04 22:58:03.820] [Nonograms] [info] 0.105828 seconds, file 15831 [2018-08-04 22:58:03.820] [Nonograms] [info] 0.08827 seconds, file 18353 [2018-08-04 22:58:03.820] [Nonograms] [info] 0.0874717 seconds, file 10590 [2018-08-04 22:58:03.820] [Nonograms] [info] 0.0831248 seconds, file 4649 [2018-08-04 22:58:03.820] [Nonograms] [info] 0.0782811 seconds, file 11922 [2018-08-04 22:58:03.820] [Nonograms] [info] 0.0734325 seconds, file 4655 [2018-08-04 22:58:03.820] [Nonograms] [info] 0.071352 seconds, file 10828 [2018-08-04 22:58:03.820] [Nonograms] [info] 0.0708263 seconds, file 11824
рдмреНрд▓реИрдХ рдПрдВрдб рд╡реНрд╣рд╛рдЗрдЯ рдиреЙрдиреЛрдЧреНрд░рд╛рдореНрд╕ izaron@izaron:~/nonograms/build$ ./nonograms_solver -x ../../nonogram/source/ -e -b [2018-08-04 22:59:56.308] [Nonograms] [info] Starting a benchmark... [2018-08-04 23:00:09.781] [Nonograms] [info] Average time: 0.0095679, Median time: 0.00239274, Max time: 0.607341 [2018-08-04 23:00:09.781] [Nonograms] [info] Top 10 heaviest nonograms: [2018-08-04 23:00:09.781] [Nonograms] [info] 0.607341 seconds, file 5126 [2018-08-04 23:00:09.781] [Nonograms] [info] 0.458932 seconds, file 19510 [2018-08-04 23:00:09.781] [Nonograms] [info] 0.452245 seconds, file 5114 [2018-08-04 23:00:09.781] [Nonograms] [info] 0.19975 seconds, file 18627 [2018-08-04 23:00:09.781] [Nonograms] [info] 0.163028 seconds, file 5876 [2018-08-04 23:00:09.781] [Nonograms] [info] 0.161675 seconds, file 17403 [2018-08-04 23:00:09.781] [Nonograms] [info] 0.153693 seconds, file 12771 [2018-08-04 23:00:09.781] [Nonograms] [info] 0.146731 seconds, file 5178 [2018-08-04 23:00:09.781] [Nonograms] [info] 0.142732 seconds, file 18244 [2018-08-04 23:00:09.781] [Nonograms] [info] 0.136131 seconds, file 19385
рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдФрд╕рдд рдХрд╛рд▓реЗ рдФрд░ рд╕рдлреЗрдж рд░рдВрдЧ рдХреЗ рдХреНрд░реЙрд╕рд╡рд░реНрдб рд░рдВрдЧ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ "рдХрдард┐рди" рд╣реИрдВред рдпрд╣ рдЦреЗрд▓ рдкреНрд░реЗрдорд┐рдпреЛрдВ рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдпрд╣ рднреА рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ "рд░рдВрдЧ" рдФрд╕рдд рдЖрд╕рд╛рди рдкрд░ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЖрдореВрд▓-рдЪреВрд▓ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд┐рдирд╛ (рдЬреИрд╕реЗ рдХрд┐ C рдпрд╛ рдЕрд╕реЗрдВрдмрд▓рд░ рдореЗрдВ рд╕рднреА рдХреЛрдб рдХреЛ рдлрд╛рд╕реНрдЯрдХреЙрд▓ рд╕реЗ рдбрд╛рд▓рдирд╛ рдФрд░ рдлреНрд░реЗрдо рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдХрдо рдХрд░рдирд╛), рдЖрдк рдмрд╣реБрдд рдорд╛рдореВрд▓реА рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдЙрдЪреНрдЪ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкреЗрд░реЗрдЯреЛ рд╕рд┐рджреНрдзрд╛рдВрдд рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдорд╛рдореВрд▓реА рдЕрдиреБрдХреВрд▓рди рджреГрдврд╝рддрд╛ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдб рдХрд╛ рдпрд╣ рдЯреБрдХрдбрд╝рд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдФрд░ рдЗрд╕реЗ рдЕрдХреНрд╕рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЖрдЧреЗ рдЕрдиреБрдХреВрд▓рди
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдХрд╛рдлреА рд╕реБрдзрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреБрдЫ рд╢рд░реНрддреЛрдВ рдХреЗ рддрд╣рддред
- рд╕реА-рд╕реНрдЯрд╛рдЗрд▓ рдФрд░ рдЕрдиреНрдп 1972 рдореЗрдВ рд░реАрд░рд╛рдЗрдЯрд┐рдВрдЧ рдХреЛрдбред рд╣рдо рдПрдирд╛рд▓реЙрдЧ рдкреНрд░рддрд┐рдкрдХреНрд╖ рдХреЗ рд╕рд╛рде ifstream рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╡реИрдХреНрдЯрд░, рд╕рднреА рд╕рдВрдХрд▓рдХ рд╡рд┐рдХрд▓реНрдк рд╕реАрдЦрддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрд╕реЗрд╕рд░ рдШрдбрд╝реА рдЪрдХреНрд░ рдХреЗ рд▓рд┐рдП рд▓рдбрд╝рддреЗ рд╣реИрдВред
- рд╕рд╛рде рдореЗрдВ рдЪрд▓рд╛рдирд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЛрдб рдореЗрдВ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рдХреЙрд▓рдо:
рдмреВрд▓ рдкрд╣реЗрд▓реА :: UpdateState (...) ... if (!UpdateGroupsState(solver, dead_rows, row_groups, row_masks)) { return false; } if (!UpdateGroupsState(solver, dead_cols, col_groups, col_masks)) { return false; } return true;
рдпреЗ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рдкрд╛рд╕ рдЪрд░ рд╕реЙрд▓реЗрд╡рд░ (рдЯрд╛рдЗрдк рд╡рдирд▓рд╛рдЗрдирд╕реЛрд▓рд░) рдХреЛ рдЫреЛрдбрд╝рдХрд░, рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рджреЛ рд╕реЙрд▓реНрд╡рд░ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╣рд╛рдБ, рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдХреЗрд╡рд▓ рдПрдХ рд╕реЙрд▓реНрд╡рд░ рд╣реИ) рдФрд░ рдПрдХ рд╣реА рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рджреЛ рдереНрд░реЗрдб рд╢реБрд░реВ рдХрд░реЗрдВред рдЗрд╕рдХрд╛ рдкреНрд░рднрд╛рд╡ рдпрд╣ рд╣реИ: рд░рдВрдЧ рд╡рд░реНрдЧ рдореЗрдВ, "рд╕рдмрд╕реЗ рдХрдард┐рди" рдХреЛ рджреЛ рдмрд╛рд░ рддреЗрдЬреА рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХрд╛рд▓реЗ рдФрд░ рд╕рдлреЗрдж рдореЗрдВ рдПрдХ рддрд┐рд╣рд╛рдИ рддреЗрдЬреА рд╕реЗ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдереНрд░реЗрдб рдмрдирд╛рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЙрдЪреНрдЪ рд▓рд╛рдЧрдд рдХреЗ рдХрд╛рд░рдг рдФрд╕рдд рд╕рдордп рдореЗрдВ рд╡реГрджреНрдзрд┐ рд╣реБрдИ рд╣реИред
рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВ рдЗрд╕реЗ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рдирд╣реАрдВ рджреВрдВрдЧрд╛ рдФрд░ рд╢рд╛рдВрддрд┐ рд╕реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ - рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдереНрд░реЗрдб рдмрдирд╛рдирд╛ рдПрдХ рдорд╣рдВрдЧрд╛ рдСрдкрд░реЗрд╢рди рд╣реИ, рдЖрдкрдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдорд╛рдЗрдХреНрд░реЛрд╕реЗрдХрдВрдб рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдереНрд░реЗрдбреНрд╕ рдирд╣реАрдВ рдмрдирд╛рдиреЗ рдЪрд╛рд╣рд┐рдП, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдлреИрд╕рд▓реЛрдВ рдХреЗ рдХреБрдЫ рд╕рдВрдпреЛрдЬрди рдХреЗ рд╕рд╛рде, рдереНрд░реЗрдбреНрд╕ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдмрд╛рд╣рд░реА рдореЗрдореЛрд░реА, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреЗ рдЪрд┐рддреНрд░ рдмрдирд╛рддреЗ рд╣реИрдВ - рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрджрд┐ рдХрд╛рд░реНрдп рдЧрдВрднреАрд░ рдерд╛ рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╕рд╛рд░реА рдбреЗрдЯрд╛ рдФрд░ рдорд▓реНрдЯреА-рдХреЛрд░ рдорд╢реАрдиреЗрдВ рд╣реЛрдВрдЧреА, рддреЛ рдореИрдВ рдФрд░ рднреА рдЖрдЧреЗ рдмрдврд╝реВрдВрдЧрд╛ - рдЖрдк рдХрдИ рдирд┐рд░рдВрддрд░ рдереНрд░реЗрдбреНрд╕ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рдХреА рдЕрдкрдиреА OneLineSolver рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛрдЧреА, рдФрд░ рдПрдХ рдЕрдиреНрдп рдереНрд░реЗрдб-рд╕реБрд░рдХреНрд╖рд┐рдд рд╕рдВрд░рдЪрдирд╛ рдЬреЛ рдХрд╛рдо рдХреЗ рд╡рд┐рддрд░рдг рдФрд░ рдорд╛рдВрдЧ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд░рдЦрддреА рд╣реИред рдпрд╣ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ / рд╕реНрддрдВрдн рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддрд╛ рд╣реИред рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдереНрд░реЗрдбреНрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдХреБрдЫ рдФрд░ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдбрд╝рддреЗ рд╣реИрдВред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЛ рдкреВрд░рд╛ рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рдиреЙрдиреЛрдЧреНрд░рд╛рдо рд╕рдорд╕реНрдпрд╛ рд╢реБрд░реВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдпрд╣ рд╕рдВрд░рдЪрдирд╛ рдкрд╛рд░рд╕реНрдкрд░рд┐рдХ рдФрд░ рд╕рднреА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рд▓рдЧреА рд╣реЛрддреА рд╣реИ, рдФрд░ рдлрд┐рд░ рдХреБрдЫ рдкреНрд░рд╡рд╛рд╣ рдореБрдХреНрдд рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред CUDA рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ GPU рдкрд░ рдЕрдзрд┐рдХ рд╕рдорд╛рдирд╛рдВрддрд░рдХрд░рдг рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдХрдИ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред
- рдХреНрд▓рд╛рд╕рд┐рдХ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ - рдЬрдм рдореИрдВрдиреЗ рд░рдВрдЧ рдиреЙрдиреЛрдЧреНрд░рд╛рдо рдХреЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЫрджреНрдо рдХреЛрдб рджрд┐рдЦрд╛рдпрд╛, рддреЛ CanInsertColor рдФрд░ PlaceColor рдлрд╝рдВрдХреНрд╢рдВрд╕ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдУ ( 1 ) , рдХрд╛рд▓реЗ рдФрд░ рд╕рдлреЗрдж nonograms рдХреЗ рд╡рд┐рдкрд░реАрддред рдпрд╣ рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
CanPlaceColor рдФрд░ SetPlaceColor bool OneLineSolver::CanPlaceColor(const vector<int>& cells, int color, int lbound, int rbound) {
рдпрд╣реА рд╣реИ, рдпрд╣ рд▓рд╛рдЗрди рдХреЗ рд▓рд┐рдП, рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ O(N) (рдмрд╛рдж рдореЗрдВ рдмрд╕ рдРрд╕реЗ рдХреЛрдб рдХреЗ рдЕрд░реНрде рдХрд╛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рд╣реЛрдЧрд╛)ред
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЖрдк рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдЬрдЯрд┐рд▓рддрд╛ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред CanPlaceColor
рд▓реЗрдВред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдпрд╣ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рдЦрдВрдб рдореЗрдВ рд╡реЗрдХреНрдЯрд░ рдХреА рд╕рднреА рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдмреАрдЪ [рд▓рд┐рдмрд░,рд░рдмрдб] рдмрд┐рдЯ рд╕рдВрдЦреНрдпрд╛ рд░рдВрдЧ 1. рдЗрд╕ рдХреЗ рдмрд░рд╛рдмрд░, рдЖрдк рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рд╕реЗрдЧрдореЗрдВрдЯ рдХреЗ рд╕рднреА рдирдВрдмрд░ рдФрд░ рдмрд┐рдЯ рдирдВрдмрд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ рд░рдВрдЧ ред рдЗрд╕ рддрдереНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рдСрдкрд░реЗрд╢рди рдФрд░ рдХрдореНрдпреВрдЯреЗрдЯрд┐рд╡ , рд╕рд╛рде рд╣реА рдпреЛрдЧ, рдиреНрдпреВрдирддрдо / рдЕрдзрд┐рдХрддрдо, рдЙрддреНрдкрд╛рдж, рдпрд╛ рдСрдкрд░реЗрд╢рди Xor , рддреНрд╡рд░рд┐рдд рдЧрд┐рдирддреА рдХреЗ рд▓рд┐рдП рдФрд░ , . :
- SQRT-. O(тИЪN) , O(тИЪN) ред .
- . O(NlogN) , O(logN) ред .
- (Sparse Table). O(NlogN) , O(1) ред .
, - ( O(N) , O(1) ) , , , varphi , ╧Ж(╬▒,╬▓)тИИ{╬▒,╬▓} , тАФ (, ...)
SetPlaceColor
. . SQRT- ( " "). - .
- тАФ .
, тАФ , ? :
- . log , , тАФ ( magic number , ). , N=105 , O(N2) 10 , O(NlogN) 0.150 , рдПрди , . , ( ): O(NтИЪN) versus O(Nlog2N) ред рдПрди ( ) тАФ 15-30.
- , .
тАФ , - тАФ рдПрди , . , ~25% ~11% , . - , , , .
тАФ , . .
- . , , - . : , , "" ? , , ! . , .
- (, 1337 1000x1000) . std::bitset , тАФ , .
, . "" . , C++ ( rope , ), hashtable , 3-6 / 4-10 /, unordered_map. , boost.
, , , -.
ROFL тАФ , "GNU's Not Unix". , , , , , . Omitting тАФ (, , : тАФ ).
, Matroska тАФ 4 [52][4F][46][4C], , , , 3 , тАФ , .
, MIT, тАФ , .
GitHub . , , (, ). Magick++ args .
, ( ). nonograms.ru , , .
nonograms.ru .. KyberPrizrak , , , ! nonograms.ru, .
.