• 结论积累中!


    感谢鹏神,因为好多都是借鉴他的昂!

    球冠、球缺(图自百度百科):

    球冠体积:S=2πR^2(1 - sinθ)=2πRH

    球缺体积:V=(π/3)*(3R-H)*H^2

    快速读入与快速输出:

     1 inline int read(){
     2     int x=0,d=1;
     3     char c=getchar();
     4     while((c>'9'||c<'0')&&c!='-')c=getchar();
     5     if(c=='-')d=-1;
     6     while(c>='0'&&c<='9'){
     7         x=x*10+c-'0';
     8         c=getchar();
     9     }
    10     return x*d;
    11 }
    12 
    13 inline void write(int num){
    14     if(num>9)write(num/10);
    15     putchar(num%10+'0');
    16 }

    组合数打表:

    1 void init(){
    2     for(int i=0;i<=500;++i){
    3         for(int j=0;j<=i;++j){
    4             C[i][j]=(i==0||j==0)?1:(C[i-1][j]+C[i-1][j-1]);
    5         }
    6     }
    7 }

    预处理阶乘以及其逆元(QP是快速幂)、并计算组合数C(n,m):

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 
     5 const int maxn=1e6 + 35;
     6 const int mod=1e9+7;
     7 
     8 ll A[maxn+5],AA[maxn+5];        //A是阶乘数组,AA是阶乘逆元数组
     9 
    10 ll QP(ll a,ll n){
    11     ll ans = 1 ,tmp = a;
    12     while(n){
    13         if(n&1)ans = ans * tmp % mod;
    14         tmp = tmp * tmp % mod;;
    15         n >>= 1;
    16     }
    17     return ans;
    18 }
    19 
    20 void init(){
    21     A[0]=1;
    22     for(int i=1;i<=maxn;++i)A[i]=A[i-1]*i%mod;
    23     AA[maxn]=QP(A[maxn],mod-2);
    24     for(int i=maxn;i>=1;--i)AA[i-1]=AA[i]*i%mod;
    25 }
    26 
    27 ll C(int n,int m){
    28     return A[n] * AA[n-m] % mod * AA[m] % mod;
    29 }

    内联汇编快速乘法:

    1 inline ll mulmod(ll x, ll y, ll mod)
    2 {
    3     ll ans=0;
    4     __asm__("movq %1,%%rax
     imulq %2
     idivq %3
    ":"=d"(ans):"m"(x),"m"(y),"m"(mod):"%rax");
    5     return ans;
    6 }

    约瑟夫环问题:

    约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。通常解决这类问题时我们把编号从0~n-1,最后结果+1即为原问题的解。

     1 #include <iostream>
     2 #include <list>
     3 using std::cout;
     4 using std::endl;
     5 using std::cin;
     6 using std::list;
     7  
     8 int main(){
     9     int total  = 0;
    10     cout << "Please input total number of people : ";
    11     cin >> total;
    12     int number = 0;
    13     cout << "Please input selected number : ";
    14     cin >> number;
    15     /* If number = 3
    16      * f(1) = 0
    17      * f(2) = 1 = (f(1) + 3) % 2
    18      * f(3) = 1 = (f(2) + 3) % 3
    19      * f(4) = 0 = (f(3) + 3) % 4
    20      * f(5) = 3 = (f(4) + 3) % 5
    21      * ...
    22      * f(n) = x = (f(n-1) + 3) % n
    23      * */
    24     int last = 0; // f(1) = 0
    25     for(int i = 2; i <= total; ++i){
    26         last = (last + number) % i;
    27     }
    28     cout << "The last one is : " << last + 1 << endl;
    29     return 0;
    30 }

    五边形数(数字拆分):

    题意:问一个数n能被拆分成多少种方法,且每一种方法里数字重复个数不能超过k(等于k)。
    分析递推式为:
     
     1 #include<iostream>
     2 #include<string.h>
     3 #include<stdio.h>
     4 using namespace std;
     5 
     6 const int N=100005;
     7 const int MOD=1000000007;
     8 
     9 int dp[N];
    10 
    11 void Init(){
    12     dp[0]=1;
    13     for(int i=1;i<N;i++){
    14         dp[i]=0;
    15         for(int j=1;;j++){
    16             int t=(3*j-1)*j/2;
    17             if(t>i)break;
    18             int tt=dp[i-t];
    19             if(t+j<=i)tt=(tt+dp[i-t-j])%MOD;
    20             if(j&1)dp[i]=(dp[i]+tt)%MOD;
    21             else dp[i]=(dp[i]-tt+MOD)%MOD;
    22         }
    23     }
    24 }
    25 
    26 int Work(int n,int k){
    27     int ans=dp[n];
    28     for(int i=1;;i++){
    29         int t=k*i*(3*i-1)/2;
    30         if(t>n)break;
    31         int tt=dp[n-t];
    32         if(t+i*k<=n)tt=(tt+dp[n-t-i*k])%MOD;
    33         if(i&1)ans=(ans-tt+MOD)%MOD;
    34         else ans=(ans+tt)%MOD;
    35     }
    36     return ans;
    37 }
    38 
    39 int main(){  
    40     Init();
    41     int n,k,t;
    42     scanf("%d",&t);
    43     while(t--){
    44         scanf("%d%d",&n,&k);
    45         printf("%d
    ",Work(n,k));
    46     }
    47     return 0;
    48 }
    幂次求和:
    Σ(i,1,n)(i)=n*(n+1)/2= 1/2 * n2 +  1/2 * n
    Σ(i,1,n)(i2)=n*(n+1)*(2n+1)/6= 1/3 * n3 + 1/2 * n2 +1/6 * n
    Σ(i,1,n)(i3)= (n*(n+1)/2)2 = 1/4 * n4 + 1/2 * n3 +1/4 * n2
    Σ(i,1,n)(i4)= n*(n+1)*(2n+1)*(3x2+3x-1)/30 = 1/5 * n5 + 1/2 * n4 + 1/3 * n3 - 1/30 * n
    Σ(i,1,n)(i4)= n*(n+1)*(2n3+4n2+n-1)/12
     
     
    海伦公式:
    S=sqrt(p*(p-a)*(p-b)*(p-c));
    p=(a+b+c)/2.0;
     
    用四边长a、b、c、d表达园内接四边形面积的婆罗摩笈多公式:
    S=sqrt((p-a)*(p-b)*(p-c)*(p-d));
    p=(a+b+c+d)/2.0;
     
    三角形外接圆半径公式:
    R=a*b*c/(4*S)=a*b*c/sqrt((a+b+c)*(a+b-c)*(a-b+c)*(-a+b+c));
    三角形内切圆半径公式:
    r=(1/2)*sqrt((a+b-c)*(a-b+c)*(-a+b+c)/(a+b+c));
    a,b,c分别为三角形的边长。
     
     

  • 相关阅读:
    [CSS3 + HTML5] Modernizr
    [Javascript] Array methods in depth
    [Unit Testing] Node testing: Test api Get request
    [CSS3] Interactive Pseudo-Classes :link :visited :hover :active
    [Javascript] Intro to Recursion
    [Javascript ] Array methods in depth
    [Javascript] Advanced Reduce: Flatten, Flatmap and ReduceRight
    [Redux] Composition with Objects
    AI-Info-Micron-Insight:人如其食:人工智能和人类微生物组
    AI-Info-Micron-Insight:用内存解决方案演化神经网络智能
  • 原文地址:https://www.cnblogs.com/cenariusxz/p/4873123.html
Copyright © 2020-2023  润新知