zoukankan      html  css  js  c++  java
  • 杂七杂八的一堆东西

     1 #include<bits/stdc++.h>
     2 #define N 100010
     3 using namespace std;
     4 typedef long long ll;
     5 ll a[N];
     6 int p;
     7 ll pow(ll y,int z,int p){
     8     y%=p;ll ans=1;
     9     for(int i=z;i;i>>=1,y=y*y%p)if(i&1)ans=ans*y%p;
    10     return ans;
    11 }
    12 ll C(ll n,ll m){
    13     if(m>n)return 0;
    14     return ((a[n]*pow(a[m],p-2,p))%p*pow(a[n-m],p-2,p)%p);
    15 }
    16 ll Lucas(ll n,ll m){
    17     if(!m)return 1;
    18     return C(n%p,m%p)*Lucas(n/p,m/p)%p;
    19 }
    20 inline int read(){
    21     int f=1,x=0;char ch;
    22     do{ch=getchar();if(ch=='-')f=-1;}while(ch<'0'||ch>'9');
    23     do{x=x*10+ch-'0';ch=getchar();}while(ch>='0'&&ch<='9');
    24     return f*x;
    25 }
    26 int main(){
    27     int T=read();
    28     while(T--){
    29         int n=read(),m=read();p=read();
    30         a[0]=1;
    31         for(int i=1;i<=p;i++)a[i]=(a[i-1]*i)%p;
    32         cout<<Lucas(n+m,n)<<endl;
    33     }
    34 }
    Lucas
    #include<cstdio>
    #include<vector>
    using namespace std;
    struct Matrix{
        vector<vector<int> > matrix;
        int r,c;
        Matrix(){r=-1,c=-1;}
        inline void input(int row,int col)
        {
            int t;
            matrix.resize(row);
            r=row,c=col;
            for(int i=0;i<r;i++)
                for(int j=0;j<c;j++)
                {
                    scanf("%d",&t);
                    matrix[i].push_back(t);
                }
        }
        inline void print(int r,int c)
        {
            for(int i=0;i<r;i++)
            {
                for(vector<int>::iterator it=matrix[i].begin();it!=matrix[i].end();++it)
                    printf("%d ",*it);
                printf("
    ");
            }
        }
        Matrix operator * (const Matrix& a)const
        {  
            Matrix ret; 
            if(this->c!=a.r&&this->r!=a.c)throw -1;
            ret.r=this->r,ret.c=a.c;
            ret.matrix.resize(ret.r);
            for(int i=0;i<ret.r;i++)
                for(int j=0;j<ret.c;j++)
                {
                    ret.matrix[i].push_back(0);
                    for(int k=0;k<this->c;k++)
                        ret.matrix[i][j]+=a.matrix[k][j]*this->matrix[i][k];
                }
            return ret;
        }
    }a,b,res;
    int r,c;
    int main()
    {
        scanf("%d%d",&r,&c);
        a.input(r,c);
        scanf("%d%d",&r,&c);
        b.input(r,c);
        try {res=a*b;}
        catch(...){printf("Unsupported Matrix.
    ");return 0;}
        res.print(res.r,res.c);
        return 0;
    }
    矩阵乘法
    #include<cstdio>
    #include<vector>
    using namespace std;
    struct Matrix {
        vector<vector<long long> > matrix;
        int r,c;
        Matrix() {
            r=-1,c=-1;
        }
        inline void input(int row,int col) {
            int t;
            matrix.resize(row);
            r=row,c=col;
            for(int i=0; i<r; i++)
                for(int j=0; j<c; j++) {
                    scanf("%d",&t);
                    matrix[i].push_back(t);
                }
        }
        inline void print() {
            if(this->r<0||this->c<0){
                printf("Invalid Matrix, Maybe Syntax Error Had Happened?
    ");
                return;
            }
            for(int i=0; i<this->r; i++) {
                for(vector<long long>::iterator it=matrix[i].begin(); it!=matrix[i].end(); ++it)
                    printf("%I64d ",*it);
                printf("
    ");
            }
        }
        Matrix operator + (const Matrix& a)const {
            Matrix ret;
            if(this->r!=a.r||this->c!=a.c)throw -1;
            ret.r=this->r,ret.c=this->c;
            ret.matrix.resize(ret.r);
            for(int i=0;i<ret.r;i++)
                for(int j=0;j<ret.c;j++)
                    ret.matrix[i].push_back(a.matrix[i][j]+this->matrix[i][j]);
            return ret;
        }
        Matrix operator - (const Matrix& a)const {
            Matrix ret;
            if(this->r!=a.r||this->c!=a.c)throw -1;
            ret.r=this->r,ret.c=this->c;
            ret.matrix.resize(ret.r);
            for(int i=0;i<ret.r;i++)
                for(int j=0;j<ret.c;j++)
                    ret.matrix[i].push_back(this->matrix[i][j]-a.matrix[i][j]);
            return ret;
        }
        Matrix operator * (const Matrix& a)const {
            Matrix ret;
            if(this->c!=a.r&&this->r!=a.c)return ret;
            ret.r=this->r,ret.c=a.c;
            ret.matrix.resize(ret.r);
            for(int i=0; i<ret.r; i++)
                for(int j=0; j<ret.c; j++) {
                    ret.matrix[i].push_back(0);
                    for(int k=0; k<this->c; k++)
                        ret.matrix[i][j]+=a.matrix[k][j]*this->matrix[i][k];
                }
            return ret;
        }
    };
  • 相关阅读:
    显示当前时间和全班学生成绩求和
    js做计算器
    javascript学习内容--改变样式、取消设置、显示内容、隐藏内容
    javascript学习内容--object.style.display="value" value值为“”none“隐藏”或 "block"显示
    元素示例
    Python网页爬虫(一)
    macbook Android开发环境搭建,真机调试
    Shell 脚本编程笔记(一) Hello Shell
    嵌入式开发(一) Ubuntu12.04下搭建交叉编译环境
    算法学习(二) 全排列问题的非递归算法——模拟堆栈
  • 原文地址:https://www.cnblogs.com/TheRoadToAu/p/7794375.html
Copyright © 2011-2022 走看看