首页 > 其他分享 >线性空间

线性空间

时间:2022-10-26 11:56:35浏览次数:47  
标签:tmp ... xor int 空间 线性 include 高斯消

高斯消元

以前只会贺板子,理解了但不深刻,很快就忘了,现在再看高斯消元,也没有很难理解的。

我们首先第一步枚举要消的元是哪个,然后将其系数置为\(1\),再将剩余方程中这个元的系数消为\(0\),这样辗转反复,我们就可以得到最后一个元的答案,然后逐步带回即可

\(code\)

#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
const double eps=1e-8;
double a[200][200];
int n;
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++)for(int j=1;j<=n+1;j++)scanf("%lf",&a[i][j]);
    for(int i=1;i<=n;i++){
        int tmp=i;
        for(int j=i+1;j<=n;j++)if(fabs(a[j][i])>fabs(a[tmp][i]))tmp=j;
        if(tmp!=i)swap(a[tmp],a[i]);
        if(fabs(a[i][i])<eps){
            puts("No Solution");
            return 0;
        }
        double lsp=a[i][i];
        for(int j=i;j<=n+1;j++)a[i][j]/=lsp;
        for(int j=i+1;j<=n;j++){
            double op=a[j][i];
            for(int k=i;k<=n+1;k++){
                a[j][k]-=op*a[i][k];
            }
        }
    }
    for(int i=n-1;i>=1;i--){
        for(int k=i+1;k<=n;k++){
            a[i][n+1]-=a[k][n+1]*a[i][k];
        }
    }
    for(int i=1;i<=n;i++)printf("%.2lf\n",a[i][n+1]);
    return 0;
}

高斯约旦消元

就是将高斯消元的过程简略了一下,在消元的情况中也对之前处理过的行消元,这样我们得到的解就可用对角线上的系数与权值相除的方法得到。

\(code\)

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
using namespace std;
const double eps=1e-8;
double a[200][200];
int n;
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++)for(int j=1;j<=n+1;j++)scanf("%lf",&a[i][j]);
    for(int i=1;i<=n;i++){
        int tmp=i;
        for(int j=i+1;j<=n;j++)if(fabs(a[j][i])>fabs(a[tmp][i]))tmp=j;
        if(tmp!=i)swap(a[tmp],a[i]);
        double div=a[i][i];
        if(fabs(div)<eps){
            puts("No Solution");
            return 0;
        }
        for(int j=i;j<=n+1;j++)a[i][j]/=div;
        for(int j=1;j<=n;j++){
            if(j==i)continue;
            div=a[j][i];
            for(int k=i;k<=n+1;k++){
                a[j][k]-=div*a[i][k];
            }
        }
    }
    for(int i=1;i<=n;i++)printf("%.2lf\n",a[i][n+1]/a[i][i]);
    return 0;
}

异或方程组

其实就是将高斯消元的方程组换为了异或方程,即从求解

\[ \begin{cases} a_{1,1}x_1+a_{1,2}x_2+a_{1,3}x_3+...+a_{1,n}x_n=b_1\\ a_{2,1}x_1+a_{2,2}x_2+a_{2,3}x_3+...+a_{1,n}x_n=b_2\\ ...\\ a_{n,1}x_1+a_{n,2}x_2+a_{n,3}x_3+...+a_{n,n}x_n=b_n \end{cases} \]

变为

\[ \begin{cases} a_{1,1}x_1\ xor\ a_{1,2}x_2\ xor\ a_{1,3}x_3\ xor\ ...\ xor\ a_{1,n}x_n=b_1\\ a_{2,1}x_1\ xor\ a_{2,2}x_2\ xor\ a_{2,3}x_3\ xor\ ...\ xor\ a_{1,n}x_n=b_2\\ ...\\ a_{n,1}x_1\ xor\ a_{n,2}x_2\ xor\ a_{n,3}x_3\ xor\ ...\ xor\ a_{n,n}x_n=b_n \end{cases} \]

因为异或是满足结合律和交换律的,所以我们可使用普通高斯消元的方法求解异或方程组,并可用\(bitset\)优化时间。下面的代码是外星千足虫这题的代码,使用的就是\(bitset\)优化高斯约旦消元求解异或方程组。

\(code\)

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<bitset>
using namespace std;
int n,m;
bitset<2010>Bit[2010];
char ch[2010];
int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;i++){
        int s1=0;
        scanf("%s%d",ch+1,&s1);
        for(int j=1;j<=n;j++)Bit[i].set(j,int(ch[j]-'0'));
        Bit[i].set(0,s1);
    }
    int ans=-1;
    for(int i=1;i<=n;i++){
        int tmp=i;
        while(tmp<=m&&!Bit[tmp].test(i))tmp++;
        if(tmp>m){
            puts("Cannot Determine");
            return 0;
        }
        ans=max(ans,tmp);
        if(tmp!=i)swap(Bit[i],Bit[tmp]);
        for(int j=1;j<=m;j++){
            if(i!=j&&Bit[j].test(i)==1)Bit[j]^=Bit[i];
        }
    }
    printf("%d\n",ans);
    for(int i=1;i<=n;i++)printf(Bit[i].test(0)==0?"Earth\n":"?y7M#\n");
    return 0;
}

标签:tmp,...,xor,int,空间,线性,include,高斯消
From: https://www.cnblogs.com/hxqasd/p/16827778.html

相关文章

  • 安卓布局常用代码介绍6——线性布局使用代码例子
    效果如下:设置思路:先利用线性布局先垂直排列第一行插入一个线性布局:水平排列,用比例排列;第二行插入一个线性布局:垂直排列,用weight=1垂直;中间这个线性布局就各种微调......
  • Tower Defense (分块+差分的差分+优化空间方法, 主席树做法待补)
    题目大意:   思路:这题难点在于每一秒会恢复值而且(mi+ri,ci)有一个阈值. 发现一个点被清理后,他的恢复有3个状态,一次恢复ri的值,当t<ci/ri,恢复ci%ri......
  • 线性空间
    参考资料:《线性代数》第三章https://www.acwing.com/video/2274/《进阶指南》定义称\((a_1,a_2,...,a_k)\)为\(k\)维向量\(\bold{a}\),其中\(a_i\in\R\)称......
  • java空间(Java堆空间)
    2017年Java开发有什么发展空间? 现在人们愈发相信,在今后的十年、二十年之内,Java都将是IT行业最炙手可热的技术,Java软件工程师将持续成为最热门的岗位之一,历史也不断的证明,JA......
  • Python命名空间(函数)
    作用域:作用范围#命名空间:划分一块区域保存所有的数据,以字典方式存储(变量与值形成映射关系)#内建命名空间:解释器启动时创建,直到解释器运行结束,生存周期最长#全局命名空......
  • Luogu P2455 [SDOI2006]线性方程组
    题目链接:​​传送门​​高斯消元可以去下面看一下​​​https://www.bilibili.com/video/av4688674​​​听视频比瞅博客有用得多这题算比较标准的板子了各种情况都有......
  • linux删除文件后,但空间未释放解决办法
    linux系统下文件被删除之后,使用df命令查看,磁盘空间却没有被释放,怎么排查?其实磁盘空间没有释放是有进程仍在占用被删除的文件,要想真正的删除,只需要停止或重启进程,释放进程......
  • BZOJ 2190([SDOI2008]仪仗队-O(n)线性筛欧拉函数)
    2190:[SDOI2008]仪仗队TimeLimit: 10Sec  MemoryLimit: 259MBSubmit: 521  Solved: 331[​​Submit​​][​​Status​​][​​Discuss​​]Descri......
  • BZOJ 1013([JSOI2008]球形空间产生器sphere-gauss消元练习)
    1013:[JSOI2008]球形空间产生器sphereTimeLimit: 1Sec  MemoryLimit: 162MBSubmit: 1181  Solved: 654[​​Submit​​][​​Status​​][​​Discu......
  • 论人类下一代语言的可能—6.1.2符号的任意性、线性(6.1传统语言学符号观点的不同理解)
    “能指与和所指的联系是任意的,或者,因为我们所说的符号是指能指与所指相联结所产生的整体,我们可以更简单地说:语言符号是任意的”[i]。进一步,索绪尔把这种任意性与可论证性相......