рдорд┐рдиреА рдмреЗрджрд▓рд╛рдо рдХреНрдпреВрдм рд▓рдЧрд╛рдирд╛

рдореИрдВрдиреЗ рдкреЗрдВрдЯрд╛рдорд┐рдиреЛ рдкрд╣реЗрд▓реА рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдЕрдкрдиреЗ рдкрд╣рд▓реЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛ рдерд╛ред рдпрд╣ рдмрд╣реБрдд рд╕рдордп рдкрд╣рд▓реЗ рдерд╛, рдХрд╛рд░реНрдпрдХреНрд░рдо рдиреЗ рдХрд┐рд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд┐рдпрд╛, рдореИрдВрдиреЗ рд╕рднреА рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдирд╣реАрдВ рдХрд┐рдпрд╛ ... рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВрдиреЗ рд▓рд┐рдЦрд╛ рдФрд░ рднреВрд▓ рдЧрдпрд╛ред

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



рдФрд░ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдЗрд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдкрд╣реЗрд▓реА рдореЗрдВ 13 рдЖрдВрдХрдбрд╝реЗ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ - 12 5 рдХреНрдпреВрдмреНрд╕ рд╕реЗ рдмрдирд╛ рд╣реИ, рдЪрд╛рд░ рдореЗрдВ рд╕реЗ рдПрдХ; рдЫрд╣ рдЖрдВрдХрдбрд╝реЗ рд╕рдордорд┐рдд рд╣реИрдВ, рдЙрдирдореЗрдВ рд╕реЗ рддреАрди рд╕рдорддрд▓ рд╣реИрдВред рдЖрдХреГрддрд┐рдпреЛрдВ рдХреЛ 4x4x4 рдмреЙрдХреНрд╕ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╕рдордп-рд╕рдордп рдкрд░ рдореИрдВрдиреЗ рдЗрди рдХреНрдпреВрдмреНрд╕ рдХреЛ рдпрд╛рдж рдХрд┐рдпрд╛, рдЙрдирдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдХреБрдЫ рднреА рдирд╣реАрдВ рдЖрдпрд╛ред рдЗрд╕рд▓рд┐рдП, рд╡рд┐рдЪрд╛рд░ рдЖрдпрд╛ - рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдкрд╣реЗрд▓реА рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдХрдо рдкреНрд░рдпрд╛рд╕ рдЦрд░реНрдЪ рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рдкреБрд░рд╛рдиреЗ рдкреНрд░рд╢реНрди рдХреЛ рд╣рд▓ рдХрд░реЗрдВ: рдХреНрдпрд╛ рдЕрдзрд┐рдХ рд▓рд╛рднрджрд╛рдпрдХ рд╣реИ - рдЖрдВрдХрдбрд╝реЗ рдпрд╛ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдЫрд╛рдВрдЯрдирд╛ рдФрд░ рдХрд┐рд╕ рдХреНрд░рдо рдореЗрдВред



рдбреЗрдЯрд╛ рдкреНрд░рд╕реНрддреБрддрд┐ рдФрд░ рд╕рд░рд▓ рдЦреЛрдЬ



рдЪреВрдВрдХрд┐ рдмреЙрдХреНрд╕ рдореЗрдВ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рдЕрднреНрдпрд╛рд╡реЗрджрди рдореЗрдВ рдмрд┐рдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рдереА, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЛ рдореБрдЦреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛: рдХреНрд╖реЗрддреНрд░ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЖрдХреГрддрд┐ рдХреА рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдерд┐рддрд┐ рдПрдХ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ: рд╕реА # - ulong)ред рдкреНрд░рддреНрдпреЗрдХ рдЖрдХреГрддрд┐ рдХреА рдЕрднрд┐рд╡рд┐рдиреНрдпрд╛рд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ 24 рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИ, рдЗрд╕ рдЕрднрд┐рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдкрджреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ 27 рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИред рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рд╕рдВрднрд╡рддрдГ рдкреНрд░рддреНрдпреЗрдХ рдЖрдВрдХрдбрд╝реЗ рдХреЗ 648 рд╕реЗ рдЕрдзрд┐рдХ рдкрджреЛрдВ рдкрд░ - рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдореЗрдореЛрд░реА рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХрд╛ рдЬреЛрдЦрд┐рдо рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдХреЗрд╡рд▓ рдЗрди рдкреНрд░рд╛рд╡рдзрд╛рдиреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рдХреБрд▓реНрд╣рд╛рдбрд╝рд┐рдпреЛрдВ рдХреЗ рдХреНрд░рдо рдФрд░ рдЙрдирдХреА рджрд┐рд╢рд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реБрдП, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ 24 рдШрди рдЕрднрд┐рд╡рд┐рдиреНрдпрд╛рд╕ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рд▓рдВрдмрд╛ рд╕рдордп рд╣реИред рдРрд╕рд╛ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ: рдШрди рд░реЛрдЯреЗрд╢рди рд╕рдореВрд╣ рдореЗрдВ рджреЛ рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ (рдПрдХ, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ), рдФрд░ рдкрд░рд┐рдгрд╛рдо рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рддрдХ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд░рд╛рдЬреНрдп рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░реЗрдВред рдореИрдВрдиреЗ рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдо (x, y, z) -> (y, z, x) рдФрд░ (x, y, z) -> (-x, z, y) рдХреЛ рдЪреБрдирд╛ред
рдкрд░рд┐рдгрд╛рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд╣реИ:
typedef unsigned __int64 ulong; const ulong XLOW=0x1111111111111111LL; const ulong YLOW=0xF000F000F000FLL; const ulong ZLOW=0xFFFFLL; const ulong XHIGH=0x8888888888888888LL; const ulong YHIGH=0xF000F000F000F000LL; const ulong ZHIGH=0xFFFF000000000000LL; struct Fig{ int NF; ulong *Arr; Fig(){ Arr=0;} void Init(ulong fig0); void Init(int nf,ulong *arr); ~Fig(){ delete Arr; } }; ulong Turn(ulong v,int rt){ ulong res=0; for(int a=0;a<64;a++){ int b=rt==0 ? (a>>2)|((a&3)<<4) : (~a&3)|((a>>2)&12)|((a<<2)&48); if((v>>a)&1) res|=1LL<<b; } if(rt) while((res&XLOW)==0) res>>=1; return res; } ulong arr0[648]; void Fig::Init(ulong fig0){ int p=0,q=1; arr0[0]=fig0; while(p<q){ ulong a=arr0[p++]; for(int u=0;u<2;u++){ ulong b=Turn(a,u); int i; for(i=0;i<q;i++) if(arr0[i]==b) break; if(i==q) arr0[q++]=b; } } for(p=0;p<q;p++) if((arr0[p]&XHIGH)==0) arr0[q++]=arr0[p]<<1; for(p=0;p<q;p++) if((arr0[p]&YHIGH)==0) arr0[q++]=arr0[p]<<4; for(p=0;p<q;p++) if((arr0[p]&ZHIGH)==0) arr0[q++]=arr0[p]<<16; Init(q,arr0); } void Fig::Init(int q,ulong *arr){ NF=q; Arr=new ulong[q]; for(int p=0;p<q;p++) Arr[p]=arr[p]; } 

рдЯрд░реНрди () рдлрд╝рдВрдХреНрд╢рди рджреЛ рдореЗрдВ рд╕реЗ рдПрдХ рдореЛрдбрд╝ рдХрд░рддрд╛ рд╣реИред рд▓рдЧрд╛рддрд╛рд░ XHIGH, XLOW, рдЖрджрд┐ред рдШрди рдХреЗ рдЪреЗрд╣рд░реЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк, рдФрд░ рдЖрдкрдХреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЖрдВрдХрдбрд╝рд╛ рдПрдХ рджрд┐рд╢рд╛ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдЖрдХреГрддрд┐рдпреЛрдВ рдХреЗ рдкреВрд░реЗ рд╕реЗрдЯ рдХреЛ рд╢реБрд░реВ рдХрд░рдирд╛ рдЕрдм рдХрд╛рдлреА рд╕рд░рд▓ рд▓рдЧрддрд╛ рд╣реИ:

 ulong Cross[2]={0x4E40000000000000LL,0x4E4000000000LL}; const int NFig=13; ulong Figs0[NFig]={0x4E4,0x136,0x263,0x10027,0x20027,0x20063,0x10063,0x30062,0x10047, 0x100017,0x10017,0x20072,0x10031}; Fig Figs[NFig]; int FState[NFig]; void InitFigs(){ Figs[0].Init(2,Cross); for(int i=1;i<NFig;i++){ Figs[i].Init(Figs0[i]); } } 


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

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

рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ - рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдХреНрд░рдо рдореЗрдВ рдЖрдВрдХрдбрд╝реЛрдВ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ - рд╕рдорд╛рдзрд╛рди рдХреА рдЦреЛрдЬ 20 рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рд╣реИ:

 void Solve(int n,ulong x){ if(n==NFig){ NSolve++; Print(); return; } Fig &F=Figs[n]; for(int i=0;i<F.NF;i++){ ulong s=F.Arr[i]; if((s&x)==0){ FState[n]=i; Solve(n+1,x|s); FState[n]=-1; } } NBack++; } 


рдЖрдВрдХрдбрд╝реЗ рдХреА рд╕реНрдерд┐рддрд┐ FState рд╕рд░рдгреА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛рддреА рд╣реИрдВ, рдФрд░ рдкреНрд░рд┐рдВрдЯ () рдлрд╝рдВрдХреНрд╢рди рдЖрд╕рд╛рдиреА рд╕реЗ рдкрд╛рдП рдЧрдП рд╕рдорд╛рдзрд╛рди рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдкрд░рд┐рдгрд╛рдо рдФрд░ рдЕрдиреБрдХреВрд▓рди



рдХреБрд▓ - 110 рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдирд┐рдХрд▓рд╛ред

рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдХреБрдЫ рд╕реЗрдХрдВрдб рдореЗрдВ рдкрд╣рд▓рд╛ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдпрд╣ рдЦрддреНрдо рд╣реЛ рдЧрдпрд╛ред "19186 рд╕реЙрд▓реНрдпреВрд╢рдВрд╕" рдмреЙрдХреНрд╕ рдкрд░ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдореИрдВ рдЙрди рд╕рднреА рдХреЛ рдвреВрдВрдврдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ (рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд▓реЗрдЦрдХ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЧрд┐рдиреЗ рдЬрд╛рддреЗ рд╣реИрдВ)ред рдореБрджреНрд░рдг рд╕рд╛рдВрдЦреНрдпрд┐рдХреА рдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджрд┐рдЦрд╛рдпрд╛:

рдкрд╣рд▓реЗ 500 рдорд┐рд▓рд┐рдпрди рд╕реЙрд▓реНрд╡ рдХреЙрд▓ рдиреЗ 295 рд╕реЗрдХрдВрдб рдкреВрд░реЗ рдХрд┐рдП, рдФрд░ рдХреЗрд╡рд▓ 44 рд╕рдорд╛рдзрд╛рди рдкрд╛рдП рдЧрдПред рдпрд╣ 1.7 рдорд┐рд▓рд┐рдпрди рдХреЙрд▓ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдФрд░ 6.7 рд╕реЗрдХрдВрдб рдкреНрд░рддрд┐ рд╕рдорд╛рдзрд╛рди рджреЗрддрд╛ рд╣реИред рд╕рднреА рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорд╛рдирд┐рдд рд╕рдордп - 36 рдШрдВрдЯреЗред

рдмрд╣реБрдд рдЬреНрдпрд╛рджрд╛ред

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

 bool HaveIsolPoint(ulong x){ ulong y=((x>>1)|XHIGH)&((x<<1)|XLOW)& ((x>>4)|YHIGH)&((x<<4)|YLOW)& ((x>>16)|ZHIGH)&((x<<16)|ZLOW); return (~x&y)!=0; } 


рд╕реЙрд▓реНрд╡ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдкрд░рд┐рдгрд╛рдо рдмреЗрд╣рддрд░ рдкрд░рд┐рдорд╛рдг рдХрд╛ рдХреНрд░рдо рдерд╛: 1.9 рдорд┐рд▓рд┐рдпрди рдХреЙрд▓ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдФрд░ рд▓рдЧрднрдЧ 1.8 рд╕рдорд╛рдзрд╛рди рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб! рдЖрдк 3 рдмрдЬреЗ рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдЖрдк 2 рдФрд░ 3 рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХрд╛ рднреА рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдХреГрддрд┐ рд╡рд┐рдЬреНрдЮрд╛рди рдпрд╣рд╛рдВ рд╕реЗ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдЖрдкрдХреЛ рдкреВрд░реНрдг рддреНрд░рд┐-рдЖрдпрд╛рдореА рднрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

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

рдкреВрд░реНрд╡ - рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 1.8 рд╕рдорд╛рдзрд╛рдиред

рдЗрд╖реНрдЯрддрдо рдЦрд╛рд▓реА рд╕реЗрд▓ рдХреА рдЦреЛрдЬ рдореЗрдВ рд╕рдордп рдмрд░реНрдмрд╛рдж рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рдХреНрд░рдо рд╕реЗ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрджрд┐ рдХреЛрд╢рд┐рдХрд╛рдПрдВ 0..N-1 рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рднрд░реА рд╣реБрдИ рд╣реИрдВ, рдФрд░ рд╕реЗрд▓ N рдЦрд╛рд▓реА рд╣реИ, рддреЛ рдпрд╣ рд╕реЗрд▓ рдХреЗрд╡рд▓ рдЙрди рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рдкрджреЛрдВ рд╕реЗ рднрд░реА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдЬрд┐рдирд╕реЗ рд╕реЗрд▓ N рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдФрд░ рд╕рд╛рде рд╣реА рдпрд╣ рдЖрдВрдХрдбрд╝реЗ рдХреА рд╕рднреА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рд╕реЗ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдиреНрдпреВрдирддрдо рд╣реИред рдЗрд╕рд▓рд┐рдП, рдиреНрдпреВрдирддрдо рд╕реЗрд▓ рдирдВрдмрд░ рджреНрд╡рд╛рд░рд╛ рдЖрдВрдХрдбрд╝реЗ рдЫрд╛рдВрдЯрдиреЗ рд╕реЗ рдЖрдк рдЦреЛрдЬ рдХреЛ рдХрд╛рдлреА рдХрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдХреЛрдб рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ (рдХреЗрд╡рд▓ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд╛рд░реНрдп рджрд┐рдЦрд╛рдП рдЧрдП рд╣реИрдВ):

 struct Fig{ int NF; ulong *Arr; int Ind[65]; Fig(){ Arr=0;} void Init(ulong fig0); void Init(int nf,ulong *arr); ~Fig(){ delete Arr; } }; extern "C" int i64cmp(const void *a,const void *b){ ulong A=*(const ulong*)a,B=*(const ulong*)b; return A<B ? -1 : A==B ? 0 : 1; } void Fig::Init(int q,ulong *arr){ NF=q; Arr=new ulong[q]; for(int p=0;p<q;p++) Arr[p]=CVT(arr[p]); qsort(Arr,q,sizeof(ulong),i64cmp); int j=0; for(int p=0;p<q;p++){ while(Arr[p]&(-1LL<<j)) Ind[j++]=p; } while(j<=64) Ind[j++]=q; } void Solve(ulong x){ int mb=63; while(mb>=0){ if((x&1)==0) break; x>>=1; mb--; } if(mb<0){ NSolve++; Print(); return; } for(int f=0;f<NFig;f++) if(FState[f]<0){ Fig &F=Figs[f]; int r1=F.Ind[mb],r2=F.Ind[mb+1]; for(int u=r1;u<r2;u++){ ulong s=F.Arr[u]; if((x&s)==0){ FState[f]=u; Solve(x|s,mb,z); } } FState[f]=-1; } NBack++; } 


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

 void Solve(ulong x,int mb,ulong z){ while(z!=0){ if((x&z)==0) break; z>>=1; mb--; } if(mb<0){ NSolve++; Print(); return; } for(int f=0;f<NFig;f++) if(FState[f]<0){ Fig &F=Figs[f]; int r1=F.Ind[mb],r2=F.Ind[mb+1]; ulong *aa=F.Arr+r1; for(int u=r1;u<r2;u++){ ulong s=*aa++; if((x&s)==0){ FState[f]=u; Solve(x|s,mb,z); } } FState[f]=-1; } NBack++; } 


рдХреБрд▓ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рдордп 102 рд╕реЗрдХрдВрдб рд╣реИ, рдкрд╣рд▓реЗ рдорд╛рдирд╛ рд╡рд┐рдХрд▓реНрдк рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд▓рдЧрднрдЧ 1250 рдЧреБрдирд╛ рдХрдо рд╣реИред рдЙрд╕реА рд╕рдордп, рдХрд╛рд░реНрдпрдХреНрд░рдо рдмрд╣реБрдд рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реБрдЖ: рд╕рдм рдХреБрдЫ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ 130 рд▓рд╛рдЗрдиреЗрдВред

рдкреНрд░рд╢реНрди рдЦреЛрд▓реЗрдВ



рдкрд╣рд▓рд╛ рд╕рд╡рд╛рд▓ рддрдХрдиреАрдХреА рд╣реИред 10 рд╕реЗ 10,000 рдЯреБрдХрдбрд╝реЛрдВ рдХреА рдорд╛рддреНрд░рд╛ рдореЗрдВ 64-рдмрд┐рдЯ рд╕рдВрдЦреНрдпрд╛ рдХреА рдПрдХ рдзрд╛рд░рд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ, 5 рд╕реЗ рдЕрдзрд┐рдХ рдЙрдард╛рдП рдЧрдП рдмрд┐рдЯреНрд╕ рдирд╣реАрдВред рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдЗрди рдирдВрдмрд░реЛрдВ рдХреА рд╕рдмрд╕реЗ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХреМрди рд╕рд╛ рдмрд┐рдЯ рдЙрдард╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рд╕рдмрд╕реЗ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдХреИрд╕реЗ рдХрд░реЗрдВ?

рджреВрд╕рд░рд╛ рдкреНрд░рд╢реНрди рдПрдХ рджрд╛рд░реНрд╢рдирд┐рдХ рд╣реИред рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рднрд░рдирд╛ рдФрд░ рдлрд┐рд░ рдкрд░рддреЛрдВ рдореЗрдВ рд╕рдмрд╕реЗ рдкреНрд░рднрд╛рд╡реА рдХреНрдпреЛрдВ рд╣реИ? рдореИрдВрдиреЗ рдХреЛрдиреЗ рдХреЛ рднрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдлрд┐рд░ рдкрд╕рд▓рд┐рдпреЛрдВ ... рдкрд░рд┐рдгрд╛рдо рд▓реЗрдХреНрд╕реЛрдЧреНрд░рд╛рдлрд┐рдХрд▓ рдСрд░реНрдбрд░ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдкрд░рд┐рдорд╛рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЦрд░рд╛рдм рд╣реЛрдиреЗ рдХреЗ рдХрдИ рдЖрджреЗрд╢ рдереЗред рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдмрд╛рдд рд╣реЛ рд╕рдХрддреА рд╣реИ?

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


All Articles