рд╣рдм рдкрд░ рд╡рд┐рднрд┐рдиреНрди рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ "рд╕рд┐рдВрдЧрд▓-рд▓рд╛рдЗрди" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрдИ рд╡рд┐рд╖рдп рдереЗ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рд╕рд░рд▓ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ C / C ++ рдореЗрдВ рдХрдИ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред
рддреЛ рдЪрд▓рд┐рдП!
1. рдпреВрдХреНрд▓рд┐рдбрд┐рдпрди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо
рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рд╕рд╛рдорд╛рдиреНрдп рднрд╛рдЬрдХ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдПрд▓реНрдЧреЛрд░рд┐рджрдоред
int GCD(int a,int b) { return b?GCD(b,a%b):a; }
2. рдПрдирдУрд╕реА рдЦреЛрдЬрдирд╛
рдХрдо рд╕реЗ рдХрдо рд╕рд╛рдорд╛рдиреНрдп рдПрдХрд╛рдзрд┐рдХ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдПрд▓реНрдЧреЛрд░рд┐рджрдоред
int LCM(int a,int b) { return a/GCD(a,b) * b; }
3. рд╕рдВрдЦреНрдпрд╛ 2 ^ n рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛
рдбрд┐рдЧреНрд░реА 2 рдХреЗ рд▓рд┐рдП рд╕рдВрдЦреНрдпрд╛ рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рджрдоред
int isPow2(int a) { return !(a&(a-1)); }
4. рджреЛ рдЪрд░ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп
рдпрд╣ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдПрдХреНрд╕рдУрдЖрд░ рдХреЗ рдкрд╛рд╕ рд╕рдордорд┐рдд рдЕрдВрддрд░ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рддреАрд╕рд░реЗ рдЪрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
void swap(int *a, int *b) { *a ^= (*b ^= (*a ^= *b)); }
5. рдкреНрд░рддрд┐рдкрд╛рджрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо
рд░реИрдЦрд┐рдХ рд╕рдордп рдореЗрдВ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдХреА рдбрд┐рдЧреНрд░реАред
рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢рд░реНрдд: рдпрджрд┐ рд╕рдВрдЦреНрдпрд╛ рдХреА рдбрд┐рдЧреНрд░реА 0 рд╣реИ, рддреЛ ^ 0 = 1 рд╣реИред
int pow(int a,int n) { return (!n)?1:a*pow(a,n-1); }
6. рднрд╛рд░рддреАрдп рдкреНрд░рддрд┐рдкрд╛рджрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо
рдПрдХ рд▓рдШреБрдЧрдгрдХ рд╕рдордп рдореЗрдВ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдХреА рд╢рдХреНрддрд┐ред
int powInd(int a,int n) { return (!n)?1:((n&1)?a:1)*powInd(a*a,n/2); }
7. рдХрд╛рд░рдХ рд╕рдВрдЦреНрдпрд╛
рдПрдХ рдЧреИрд░-рдЛрдгрд╛рддреНрдордХ рдкреВрд░реНрдгрд╛рдВрдХ n рдХрд╛ рднрд╛рдЬреНрдпред
рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдирд┐рд░рдВрддрд░рддрд╛: factorial n рд╕рдорд╛рд╡реЗрд╢реА рддрдХ рд╕рднреА рдкреНрд░рд╛рдХреГрддрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдЙрддреНрдкрд╛рдж рд╣реИред
рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рддрд┐: рдпрджрд┐ рд╕рдВрдЦреНрдпрд╛ 0 рд╣реИ, рддреЛ 0! = 1ред
int fac(int n) { return n?n*fac(n-1):1; }
8. рдХрд┐рд╕реА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЕрдВрдХреЛрдВ рдХрд╛ рдпреЛрдЧ
рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╢рд░реНрдд: рдХрд┐рд╕реА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЕрдВрдХреЛрдВ рдХрд╛ рдпреЛрдЧ рдЕрдВрддрд┐рдо рдЕрдВрдХреЛрдВ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЕрдВрддрд┐рдо рдЕрдВрдХреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЕрдВрдХреЛрдВ рдХрд╛ рдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИред
рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐: рдпрджрд┐ рд╕рдВрдЦреНрдпрд╛ 0 рд╣реИ, рддреЛ рдЕрдВрдХреЛрдВ рдХрд╛ рдпреЛрдЧ 0 рд╣реИред
int count(int a) { return (!a)?0:(a%10+count(a/10)); }
9. рдлрд╛рдЗрдмреЛрдиреИрдЪрд┐ рд╕рдВрдЦреНрдпрд╛
рдлрд╛рдЗрдмреЛрдиреИрдЪрд┐ рд╕рдВрдЦреНрдпрд╛ - рдПрдХ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдЕрдиреБрдХреНрд░рдо рдХреЗ рддрддреНрд╡ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдж рдХреА рд╕рдВрдЦреНрдпрд╛ рджреЛ рдкрд┐рдЫрд▓реА рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдпреЛрдЧ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрддреА рд╣реИред
int fib(int n) { return (n<=2)?1:(fib(n-1)+fib(n-2)); }
10. рдЕрдЧрд▓рд╛ рдлрд╛рдЗрдмреЛрдиреИрдЪрд┐ рд╕рдВрдЦреНрдпрд╛
рдлрд╛рдЗрдмреЛрдиреИрдЪрд┐ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХрд╛ рдХрд╛рд░реНрдпред
int fibNext(int &f1,int &f2) { return f1=(f2+=f1)-f1; }
11. рдореЗрд░рд╕реЗрди рдирдВрдмрд░
Mersenne рд╕рдВрдЦреНрдпрд╛ - рдлрд╛рд░реНрдо рдХреА рд╕рдВрдЦреНрдпрд╛
int Mersen(int n) { return !(n&(n+1)); }
12. рдиреНрдпреВрдирддрдо рдФрд░ рдЕрдзрд┐рдХрддрдо
int max(int a,int b) { return (a>b)?a:b; } int min(int a,int b) { return (a>b)?b:a; }
13. рджреЛ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рддреБрд▓рдирд╛
рдлрд╝рдВрдХреНрд╢рди рджреЛ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдмреАрдЪ рдХреЗ рдЕрдВрддрд░ рдХрд╛ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЕрдВрддрд░ 0 рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рддреЛ рд╕рдВрдЦреНрдпрд╛ a рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рдпрджрд┐ рдпрд╣ 0 рд╣реИ, рддреЛ рд╕рдВрдЦреНрдпрд╛ рд╕рдорд╛рди рд╣реИрдВ, рдЕрдиреНрдпрдерд╛ рд╕рдВрдЦреНрдпрд╛ a рд╕реЗ рдХрдо рд╣реИред
template <typename TYPE> int compare (const TYPE a, const TYPE b){ return ( a - b ); }
14. рд╕рдВрдЦреНрдпрд╛ 2 рдХреЛ n рдХреА рд╢рдХреНрддрд┐ рддрдХ рдмрдврд╝рд╛рддреЗ рд╣реБрдП
N рдмрд┐рдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рдПрдХрддрд╛ рдХреА рдкрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдбрд┐рдЧреНрд░реА рдПрди рдореЗрдВ рдПрдХ рджреЛ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВред
int pow2(int n) { return 1<<n; }
рдХреЛрдореЗрдиреНрдЯ рд╕реЗ рд╕рд┐рдВрдЧрд▓ рд▓рд╛рдЗрди
Lertmind рд╕реЗ рдПрдирдУрд╕реА рдЦреЛрдЬрдирд╛
int lcm(int a, int b) { return (b < 1 ? (b ? lcm(b, a % b) : a) : (a / -lcm(-b, -a % b) * b)); }
Mrrl рд╕реЗ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЧреИрд░-рд╢реВрдиреНрдп рдмрд┐рдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛
int NBit(unsigned int x){ return x==0 ? 0 : (x&1)+NBit(x>>1); }
Mrrl рд╕реЗ n рджреНрд╡рд╛рд░рд╛ рд╡рд┐рднрд╛рдЬрд┐рдд рджреЛ рдХреА рдЕрдзрд┐рдХрддрдо рд╢рдХреНрддрд┐
int MaxDivPow2(int n){ return n&-n; }
Lertmind рд╕реЗ рджреЛ рдирдВрдмрд░ рдХреА рддреБрд▓рдирд╛
int cmp(int a, int b) { return (a < b ? -1 : (a > b ? 1 : 0)); }
рдпрд╛ рдкреИрдЯрд░реНрди
template<typename T> int cmp(const T &a, const T &b) { return (a < b ? -1 : a > b); }
Mrrl рд╕реЗ рдПрдХ рдЗрдВрдЯ * рдЕрд░реИ (рдорд╛рди рд╕рд╛рдЗрдЬрд╝реЛрдлрд╝ (int) == 4) рдореЗрдВ kth рдмрд┐рдЯ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ
int GetBit(int *a,int k){ return (a[k>>5]>>(k&31))&1; }
рдореИрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЕрдзрд┐рдХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ ...