zoukankan      html  css  js  c++  java
  • 结论积累中!

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

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

    球冠体积: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分别为三角形的边长。
     
     

  • 相关阅读:
    WCF 第十三章 可编程站点 为站点创建操作
    WCF 第十三章 可编程站点 所有都与URI相关
    WCF 第十二章 对等网 使用自定义绑定实现消息定向
    WCF 第十三章 可编程站点 使用WebOperationContext
    Using App.Config for user defined runtime parameters
    WCF 第十三章 可编程站点
    WCF 第十三章 可编程站点 使用AJAX和JSON进行网页编程
    WCF 第十二章 总结
    WCF 第十三章 可编程站点 使用WebGet和WebInvoke
    WCF 第十三章 可编程站点 URI和UriTemplates
  • 原文地址:https://www.cnblogs.com/cenariusxz/p/4873123.html
Copyright © 2011-2022 走看看