高斯消元总结

news2025/8/11 16:38:47

A-Matrix Equation_第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(济南)(重现赛)

         自己写一个2维矩阵或者3维矩阵就可以发现对于每一列来说都是独立的,每一列的n个Cij都是都关系的,这就构成了一个n元一次方程组,其实这就是解一下这个方程组,但是他是问的有多少个矩阵,对于这个方程组构造出的矩阵来说,有多少自由元就说明有多少个Cij是可以任意取值的,也就是有1,2两种选择,不是自由元的就只能有1种;自由元是指系数都是0的未知数,自由元的个数就是高斯消元后0行的个数,所以用高斯消元就可以求出来;

        又因为有运算是模2的,所以也就可以看成是异或型矩阵,那么运算方式就要稍微的发生以下变化,比如

上述图片来自2020icpc-济南站_琅歌的博客-CSDN博客 

#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
const int mod=998244353;
const int inf=1e18;
const int N = 2e5+100;
const double eps=1e-8;
int qpow(int a,int b)
{
    int res=1;
    while(b)
    {
        if(b&1) res=res*a%mod;
        a=a*a%mod;
        b>>=1;
    }
    return res;
}
int getinv(int a){return qpow(a,mod-2LL);}
int n;
int a[220][220],b[220][220],d[220][220],fac[N];
int gauss()
{
    int newline=1;
    for(int k=1;k<=n;k++)
    {
        int p=newline;
        for(int i=newline+1;i<=n;i++)
        if(d[i][k]>d[p][k]) p=i;
        if(d[p][k]==0) continue;
        swap(d[newline],d[p]);
        for(int i=newline+1;i<=n;i++)
        {
            if(d[i][k]==0) continue;
            for(int j=1;j<=n;j++)
            d[i][j]^=d[newline][j];
        }
        newline++;
    }
    newline--;
    return n-newline;
}
void print()
{
    cout<<"--------------------\n";
        for(int i=1;i<=n;i++)
        {
            for(int k=1;k<=n;k++)
            cout<<d[i][k]<<" ";
            cout<<endl;
        }
        cout<<"--------------------\n";
}
signed main()
{
    //ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    cin>>n;
    fac[0]=1;
    for(int i=1;i<=100000;i++) fac[i]=fac[i-1]*2LL%mod;
    for(int i=1;i<=n;i++)
    for(int j=1;j<=n;j++) cin>>a[i][j],d[i][j]=a[i][j];
    for(int i=1;i<=n;i++)
    for(int j=1;j<=n;j++) cin>>b[i][j];
    int ans=1;
    for(int j=1;j<=n;j++)
    {
        for(int i=1;i<=n;i++) 
        for(int k=1;k<=n;k++) d[i][k]=a[i][k];
        for(int i=1;i<=n;i++)
        d[i][i]=a[i][i]^b[i][j];
        //print();
        int res=gauss();
        //print();
        //cout<<res<<endl;
        ans=ans*fac[res]%mod;
        //cout<<j<<" "<<res<<endl;
        //print();
    }
    cout<<ans<<endl;
    system("pause");
    return 0;
}

借助这个题又回顾了一下高斯消元的东西,高斯消元其实就是大一学的矩阵的行列变换使得矩阵变为行阶梯型,步骤为:

1.设一变量newline代表进行到了第几行,最外层枚举列号k,内层枚举行i,找到最大的a[i][k]让其作为主元,将第i行与第newline行交换,如果最大的a[i][k]==0说明该变量是自由元,跳过去操作下一列;

2.将主元下面的数都消掉,就是行变换

3.操作结束后常数项/主元系数就是该未知数的解

#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
const int mod=998244353;
const int inf=1e18;
const int N = 2e5+100;
const double eps=1e-8;
int qpow(int a,int b)
{
    int res=1;
    while(b)
    {
        if(b&1) res=res*a%mod;
        a=a*a%mod;
        b>>=1;
    }
    return res;
}
int sgn(double x)
{
    if(fabs(x)<eps) return 0;
    else if(x<0) return -1;
    else return 1;
}
int getinv(int a){return qpow(a,mod-2LL);}
int n;
double a[55][55];
void gauss()
{
    int nl=1;
    for(int k=1;k<=n;k++)
    {
        int p=nl;
        for(int i=nl+1;i<=n;i++)
        if(a[p][k]<a[i][k]) p=i;
        //找一列中最大的数作为主元
        if(sgn(a[p][k])==0) continue;
        //如果最大的数是0那这个变量是一个自由元,跳过
        swap(a[p],a[nl]);
        //将主元所在的行换到上面
        for(int i=1;i<=n;i++)
        {
            if(i==nl) continue;
            double tmp=a[i][k]/a[nl][k];
            for(int j=1;j<=n+1;j++)
            a[i][j]-=tmp*a[nl][j];
            //将该主元所在的列中的非零元素都消去,使得这一列中只有主元一个非零元素
        }
        nl++;
    }
    nl--;
    if(nl<n)
    {
        //如果行数不够n,说明含有自由元
        for(int i=nl+1;i<=n;i++)
        {
            //如果常数项不为0说明是无解的
            if(a[i][n+1]!=0){cout<<"-1\n";return;}
        }
        //如果常数项是0说明是无穷解
        cout<<"0\n";return;
    }
    for(int i=1;i<=n;i++)
    {
        //常数项/主元系数就是未知数的解
        cout<<"x"<<i<<"="<<fixed<<setprecision(2)<<a[i][n+1]/a[i][i]<<endl;
    }
}
signed main()
{
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    cin>>n;
    for(int i=1;i<=n;i++)
    for(int j=1;j<=n+1;j++) cin>>a[i][j];
    gauss();
    system("pause");
    return 0;
}

P2962 [USACO09NOV]Lights G - dfs+高斯消元

这题也是异或方程组,可以发现假设每个灯按的次数是xi,那么对于每一个灯来说

xj1^xj2^xj3^...^xi^...^xjm=1,j[1...m]是与i相连的灯,n个灯就构成了n元异或方程组,高斯消元后,如果有自由元的存在就要枚举这个灯开着优还是关掉优,最后取一个最优值即可

题解 P2962 【[USACO09NOV]灯Lights】 - Youngsc_AFO 的博客 - 洛谷博客 (luogu.com.cn)

#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
const int mod=998244353;
const int inf=1e18;
const int N = 4e5+100;
const double eps=1e-8;
int qpow(int a,int b)
{
    int res=1;
    while(b)
    {
        if(b&1) res=res*a%mod;
        a=a*a%mod;
        b>>=1;
    }
    return res;
}
int sgn(double x)
{
    if(fabs(x)<eps) return 0;
    else if(x<0) return -1;
    else return 1;
}
int getinv(int a){return qpow(a,mod-2LL);}
int a[55][55],n,m;
int vis[55],ans;
void gauss()
{
    int nl=1;
    for(int k=1;k<=n;k++)
    {
        int p=nl;
        for(int i=nl+1;i<=n;i++) if(a[p][k]<a[i][k]) p=i;
        if(a[p][k]==0) continue;
        swap(a[p],a[nl]);
        for(int i=1;i<=n;i++)
        {
            if(i==nl||a[i][k]==0) continue;
            for(int j=1;j<=n+1;j++)
            a[i][j]^=a[nl][j];
        }
        nl++;
    }
    nl--;
}
void dfs(int pos,int res)
{
    if(ans<=res) return;
    if(pos==0)
    {
        ans=res;return;
    }
    int ma=n+1;
    for(int i=pos;i<=n;i++)
    {
        if(a[pos][i]){ma=i;break;}
    }
    if(ma<=n)
    {
        int num=a[pos][n+1];
        for(int i=ma+1;i<=n;i++)
        {
            if(a[pos][i]) num^=vis[i];
        }
        dfs(pos-1,res+num);
    }
    else
    {
        vis[pos]=0;
        dfs(pos-1,res);
        vis[pos]=1;
        dfs(pos-1,res+1);
        vis[pos]=0;
    }
}
void print()
{
    cout<<"-----------------------------\n";
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n+1;j++)
        cout<<a[i][j];
        cout<<endl;
    }
    cout<<"------------------------------\n";
}
signed main()
{
    //ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    //freopen("in.txt","r",stdin);
        cin>>n>>m;
        for(int i=1;i<=n;i++) a[i][i]=a[i][n+1]=1;
        for(int i=1;i<=m;i++)
        {
            int u,v;cin>>u>>v;
            a[u][v]=a[v][u]=1;
        }
        //print();
        gauss();
        ans=inf;
        //print();
        dfs(n,0);
        cout<<ans<<endl;
    system("pause");
    return 0;
}

P5027 Barracuda - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

根据题意列出方程然后枚举每一个方程是错误的,注意判断不合法的几个细节就可以,然后比较的时候一定要fabs,虽然都是正的,但是不加就是会wa,,,

#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
const int mod=998244353;
const int inf=1e18;
const int N = 4e5+100;
const double eps=1e-10;
int qpow(int a,int b)
{
    int res=1;
    while(b)
    {
        if(b&1) res=res*a%mod;
        a=a*a%mod;
        b>>=1;
    }
    return res;
}
int sgn(double x)
{
    if(fabs(x)<eps) return 0;
    else if(x<0) return -1;
    else return 1;
}
bool integer(double s)
{
    if(abs(round(s)-s)<eps) return 1;
    return 0;
}
int getinv(int a){return qpow(a,mod-2LL);}
double a[105][105],b[105];
int n;
vector<int>v[105];
int gauss()
{
    int nl=1;
    for(int k=1;k<=n;k++)
    {
        int p=nl;
        for(int i=nl+1;i<=n;i++) if(fabs(a[p][k])<fabs(a[i][k])) p=i;
        //加上fabs才对,不知道为何,明明都是正的呀
        if(sgn(a[p][k])==0) continue;
        swap(a[p],a[nl]);
        for(int i=1;i<=n;i++)
        {
            if(i==nl) continue;
            double tmp=a[i][k]/a[nl][k];
            for(int j=1;j<=n+1;j++)
            a[i][j]-=tmp*a[nl][j];
        }
        nl++;
    }
    nl--;
    if(nl<n) return 0;
    double res=0;
    int ma=n+1;
    for(int i=1;i<=n;i++)
    {
        double tmp=a[i][n+1]/a[i][i];
        if(tmp<0||sgn(a[i][n+1])==0) return 0; 
        int ztmp=tmp;
        if(sgn(tmp-ztmp)!=0) return 0;
        if(res<tmp)
        {
            res=tmp;ma=i;
        }
    }
    int cnt=0;
    for(int i=1;i<=n;i++)
    {
        double tmp=a[i][n+1]/a[i][i];
        if(sgn(res-tmp)==0) cnt++;
    }
    if(cnt>1) return 0;
    return ma;
}
void print()
{
    cout<<"-----------------------------\n";
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n+1;j++)
        cout<<a[i][j];
        cout<<endl;
    }
    cout<<"------------------------------\n";
}
signed main()
{
    //ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    //freopen("in.txt","r",stdin);
    cin>>n;
    for(int i=1;i<=n+1;i++)
    {
        int m;cin>>m;
        for(int j=1;j<=m;j++)
        {
            int x;cin>>x;v[i].push_back(x);
        }
        cin>>b[i];
    }
    int ans=-1,mark=0;
    for(int i=1;i<=n+1;i++)
    {
        for(int j=1;j<=n;j++)
        for(int k=1;k<=n+1;k++) a[j][k]=0;
        int cnt=0;
        for(int j=1;j<=n+1;j++)
        {
            if(i==j)continue;
            cnt++;
            for(int k=0;k<v[j].size();k++)
            {
                a[cnt][v[j][k]]=1;
                //cout<<v[j][k]<<" "<<v[j].size()<<" "<<j<<endl;
            }
            a[cnt][n+1]=b[j];
        }
        //print();
        int flag=gauss();
        //print();
        if(flag)
        {
            mark++;
            ans=flag;
            if(mark>1){ans=-1;break;}
        }
    }
    if(ans==-1) cout<<"illegal\n";
    else cout<<ans<<endl;
    system("pause");
    return 0;
}

P2447 [SDOI2010] 外星千足虫 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

一开始就构造成m行n+1列的方程组直接高斯消元,记录最大用到的行就是最小的K,N太大就用bitset优化,有一篇题解是不需要bitset的,但是我不知道他的做法为什么对就没采用,还是老老实实的用bitset吧

题解 P2447 【[SDOI2010]外星千足虫】 - YoungNeal 的博客 - 洛谷博客

#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
const int mod=998244353;
const int inf=1e18;
const int N = 4e5+100;
const double eps=1e-10;
int qpow(int a,int b)
{
    int res=1;
    while(b)
    {
        if(b&1) res=res*a%mod;
        a=a*a%mod;
        b>>=1;
    }
    return res;
}
int sgn(double x)
{
    if(fabs(x)<eps) return 0;
    else if(x<0) return -1;
    else return 1;
}
bool integer(double s)
{
    if(abs(round(s)-s)<eps) return 1;
    return 0;
}
int getinv(int a){return qpow(a,mod-2LL);}
int n,m,b[2005],ans;
char s[2005][1005];
bitset<1005>a[2005];
bool gauss()
{
    ans=0;
    int nl=1;
    for(int k=1;k<=n;k++)
    {
        int p=nl;
        for(int i=nl;i<=m;i++) if(a[i][k]==1){p=i;break;}
        if(a[p][k]==0) return 0;
        ans=max(ans,p);
        swap(a[p],a[nl]);
        for(int i=1;i<=m;i++)
        {

            if(i==nl||a[i][k]==0) continue;
            // for(int j=k;j<=n+1;j++)
            // a[i][j]^=a[nl][j];
            a[i]^=a[nl];
        }
        nl++;
    }
    nl--;
    return nl>=n;
}
void print()
{
    cout<<"-----------------------------\n";
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n+1;j++)
        cout<<a[i][j];
        cout<<endl;
    }
    cout<<"------------------------------\n";
}
signed main()
{
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    //freopen("in.txt","r",stdin);
    cin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        cin>>(s[i]+1);
        for(int j=1;j<=n;j++) a[i][j]=(s[i][j]-'0');
        int x;cin>>x;
        a[i][n+1]=x;
    }
    if(gauss())
    {
        cout<<ans<<endl;
        for(int i=1;i<=n;i++)
        {
            if(a[i][n+1]^a[i][i]) cout<<"Earth\n";
            else cout<<"?y7M#\n";
        }
    }
    else cout<<"Cannot Determine\n";
    system("pause");
    return 0;
}

P2973 [USACO10HOL]Driving Out the Piggies G - 高斯消元解方程组,概率

假设期望是经过这个点几次才会爆炸,那么期望其实是和概率在数值上是一样的了,也就是把每走一步的代价看作1,也就相当于在求期望了,f[i]表示经过了多少次i点会爆炸,然后根据题意就可以列出

f[i]=1+sum(f[j]*(1-P)*(1/in[j])) (i==1)

f[i]=sum(f[j]*(1-P)*(1/in[j])) (i!=1)

P是爆炸的概率,in[j]是j的度数,j可以到达i,j一共可以到达in[j]个点,j到达i的概率就是1/in[j],f[i]就可以通过j来转移,当i==1时因为一开始的起点就是1,所以1这个点一开始就经过了一次,所以要加上1

#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
const int mod=998244353;
const int inf=1e18;
const int N = 4e5+100;
const double eps=1e-10;
int qpow(int a,int b)
{
    int res=1;
    while(b)
    {
        if(b&1) res=res*a%mod;
        a=a*a%mod;
        b>>=1;
    }
    return res;
}
int sgn(double x)
{
    if(fabs(x)<eps) return 0;
    else if(x<0) return -1;
    else return 1;
}
bool integer(double s)
{
    if(abs(round(s)-s)<eps) return 1;
    return 0;
}
int getinv(int a){return qpow(a,mod-2LL);}
int e[305][305],n,m,in[305];
double p,q,a[305][305],P;
void gauss()
{
    int nl=1;
    for(int k=1;k<=n;k++)
    {
        int p=nl;
        for(int i=nl+1;i<=n;i++) if(a[p][k]<a[i][k]) p=i;
        if(sgn(a[p][k])==0) continue;
        swap(a[p],a[nl]);
        for(int i=1;i<=n;i++)
        {
            if(i==nl) continue;
            double tmp=a[i][k]/a[nl][k];
            for(int j=1;j<=n+1;j++)
                a[i][j]-=tmp*a[nl][j];
        }
        nl++;
    }
    for(int i=1;i<=n;i++)
    {
        double tmp=a[i][n+1]/a[i][i]*P;
        cout<<tmp<<endl;
    }
}
signed main()
{
    //ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    //freopen("in.txt","r",stdin);
    cin>>n>>m>>p>>q;
    P=p/q;
    for(int i=1;i<=m;i++)
    {
        int u,v;
        cin>>u>>v;
        in[u]++;in[v]++;
        e[u][v]=e[v][u]=1;
    }
    for(int i=1;i<=n;i++) a[i][i]=1;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            if(e[i][j]) a[i][j]-=a[j][j]*(1.0-P)/in[j];
        }
    }
    a[1][n+1]=1;
    gauss();
    system("pause");
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/33759.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Sentinel熔断降级

Sentinel熔断降级 1、介绍 官网地址&#xff1a;https://github.com/alibaba/Sentinel/wiki/熔断降级 Sentinel 提供以下几种熔断策略&#xff1a; 慢调用比例 (SLOW_REQUEST_RATIO)&#xff1a;选择以慢调用比例作为阈值&#xff0c;需要设置允许的慢调用 RT&#xff08;即最…

cesium for ue5中actor的cesium georeference组件的改变

今天&#xff0c;重新回顾下cesium for ue的教程&#xff0c;actor添加cesium georeference组件 发现在ue5中&#xff0c;没有这个组件了&#xff0c; 忍住卸载ue5&#xff0c;重新安装ue4.27的冲动&#xff0c;cesium的组件数量增多了&#xff0c;反而功能减少了&#xff…

hive的安装配置及使用

hive需要MySQL和hadoop的支持 文章目录hive需要MySQL和hadoop的支持安装完毕MySQL之后下载并解压hive添加系统环境变量配置hive修改 vim hive-env.sh修改hive-site.xml(1、简化配置&#xff08;推荐&#xff09;)修改hive-site.xml(2、在简化的基础上添加了部分配置)下载一个my…

Java项目:JSP药店药品商城管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目分为前后台&#xff0c;分为管理员与普通用户两种角色&#xff0c;管理员登录后台&#xff0c;普通用户登录前台&#xff1b; 管理员角色…

VMware使用教程

文章目录下载软件安装软件新建虚拟机自定义安装下载软件 下载VMware软件&#xff08;应该是需要许可证/密钥的&#xff0c;时间长有点忘了&#xff0c;当然建议买&#xff0c;拒绝白嫖&#xff0c;保护产权&#xff08;可以直接百度搜doge&#xff09;&#xff09;。 安装软件…

Sentinel流控规则

Sentinel流控规则 1、基本介绍 资源名&#xff1a;唯一名称&#xff0c;默认请求路径(如&#xff1a;http://localhost:8089/testA) 针对来源&#xff1a;Sentinel可以针对调用者进行限流&#xff0c;填写微服务名&#xff0c;指定对哪个微服务进行限流 &#xff0c;默认defa…

Bioinformatics2021 | FraGAT+:基于分子原始片段的多尺度图注意力机制的分子性质预测模型

原文标题&#xff1a;FraGAT: a fragment-oriented multi-scale graph attention model for molecular property prediction 论文地址&#xff1a;FraGAT: a fragment-oriented multi-scale graph attention model for molecular property prediction | Bioinformatics | Oxfo…

Windows OpenGL ES 图像阴影

目录 一.OpenGL ES 图像阴影 1.原始图片2.效果演示 二.OpenGL ES 图像阴影源码下载三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效 零基础 OpenGL E…

SuperMap 云原生动态伸缩不可用该如何解决

最近碰到个别用户在ARM环境国产化操作系统中使用SuperMap iManager for K8S的时候出现服务节点伸缩不生效的问题。今天咱们就以此例来给大家讲解下如何解决该问题。 问题现象&#xff1a;在云套件服务节点管理中&#xff0c;设置伸缩为动态伸缩&#xff0c;设置阈值条件后&…

web前端-javascript-自增++和自减--(a++和++a,都在自身基础上+1,a--和--a都在自增基础上-1,自增和自减的练习)

文章目录自增和自减--1. 自增 1.1 通过自增可以使变量在自身的基础上增加1.2 对一个变量自增以后&#xff0c;原变量的值会立即自增 11.3 自增分为两种&#xff0c;&#xff1a;后(a) 和 前(a)2. 自减 --2.1 通过自减可以使变量在自身的基础上减 12.2 自减分成两种&#xff0c;…

(热门)智慧社区助力实现社区数字化转型

社区是人们生活的重要场所&#xff0c;传统社区的运营及管理方式已经无法满足人们日益增长的物质和文化生活需要。社区的通讯、安全和社区居民信息的收集、处理及共享等问题都成为阻碍社区服务进一步发展的瓶颈。 智慧社区是利用物联网、云计算、移动互联网、信息智能终端等新…

前后端分离项目,vue+uni-app+php+mysql订座预约系统设计与实现(H5移动项目)

功能介绍 【后台功能】 广告管理&#xff1a;设置小程序首页轮播图广告和链接 留言列表&#xff1a;所有用户留言信息列表&#xff0c;支持删除 会员列表&#xff1a;查看所有注册会员信息&#xff0c;支持删除 录入资讯&#xff1a;录入资讯标题、内容等信息 管理资讯&#x…

电力电子元器件行业研究:市场规模持续增长

电力电子元器件制造是指用于电能变换和控制&#xff08;从而实现运动控制&#xff09;的电子产品的制造。 电力电子器件具有以下特征 1&#xff09;其处理电功率的能力较强&#xff1b;&#xff08;2&#xff09;其主要工作在开关状态&#xff1b;&#xff08;3&#xff09;电…

前后端分离项目,vue+uni-app+php+mysql电影院售票系统设计与实现(H5移动项目)

功能介绍 【后台功能】 会员列表&#xff1a;查看所有注册会员信息&#xff0c;支持删除 录入资讯&#xff1a;录入资讯标题、内容等信息 管理资讯&#xff1a;查看已录入资讯列表&#xff0c;支持删除和修改 广告设置&#xff1a;上传图片和设置小程序首页轮播图广告地址 留言…

Java项目:JSP网上在线酒类商城系统网站

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目为前后台项目&#xff0c;分为普通用户与管理员两种角色&#xff0c;普通用户登录前台&#xff0c;管理员登录后台&#xff1b; 管理员角…

[附源码]java毕业设计医院疫情疾控管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Android入门第34天-Android的Menu组件使用大全

简介 Android有不同的菜单&#xff1a; 系统菜单弹出菜单&#xff08;可自定义样式&#xff09;Context Menu&#xff1b;子菜单&#xff1b; 菜单的使用和我们前面说的AlertDialog很像。它可以支持自定义样式、也可以对菜单的点击事件进行绑定。 Android里有几个MainActivit…

《嵌入式 - 深入剖析STM32》STM32 启动流程详解(GCC)

开发环境&#xff1a; 处理器&#xff1a;STM32F103 GCC&#xff1a;10.3.1 对于我们常用的桌面操作系统而言&#xff0c;我们在开发应用时&#xff0c;并不关心系统的初始化&#xff0c;绝大多数应用程序是在操作系统运行后才开始运行的&#xff0c;操作系统已经提供了一个合…

vxe-table 表格尾部小计列项再合计展示

公式&#xff1a;店员奖金item1item3item5item7 this.dyjj全局变量 this.tableDat 全局数组 1.求出尾部小计这一行的数据 columns.map((column, columnIndex) > { var aa XEUtils.sum(data, column.property) this.tableDat.push(aa) if (columnIndex 0) { return ‘小计…

USB TO I2C/SPI(上海同旺电子)调试器调试ADT7420--step3

所需设备&#xff1a; 1、USB TO I2C/SPI(上海同旺电子)专业版 或 升级版 2、ADT7420 0.25C精度、16位数字I2C温度传感器; USB TO I2C/SPI(上海同旺电子)专业版 或 升级版&#xff0c;既支持I2C的标准指令&#xff0c;又支持I2C的复合指令&#xff0c;市面上大部分I2C调试器…