zoukankan      html  css  js  c++  java
  • 题解 外星千足虫(线性基+高斯消元)

    题解 luogu外星千足虫(线性基+高斯消元)

    题目

    luogu题目传送门

    题解想法

    1. 首先需要知道这是个异或方程对吧
      然后既然看到位运算,又有这么多,就可以考虑线性基(做题技巧),那我们就丢进去
      接下来看一看线性基,哇,性质美妙
      它不就是Gauss消元里面想要的上三角矩阵吗
    2. 所以说:
    • 如果能拼成线性基,那么枚举到哪里完成了,就输出位置(first_ans)
    • 如果拼不成,那就解不出(毋庸置疑)
    1. 那真是美妙啊。。。
    2. 所以怎么消元呢?这可是个异或方程,我们要解出来啊
      枚举整个线性基的g[i]
      如果g[i][j]这一位上为1,是不是就有一个未知数!
      (注意这是个异或方程)
      我们的线性基在g[j][j]上是一定会有数的对吧
      那我们直接给g[i]异或一下g[j]不就消掉了!!!
      直到枚举玩整个g[i],剩下的y(输入的那个"等号右边"的)如果为0就是地球了,为1就是外星了(单数只脚。。。)

    code

    #include<iostream>
    #include<cstdlib>
    #include<cstdio>
    #include<cmath>
    #include<cstring>
    #include<iomanip>
    #include<algorithm>
    #include<ctime>
    #include<queue>
    #include<stack>
    #include<vector>
    #include<bitset>
    #define lst long long
    #define ldb long double
    #define N 2050
    using namespace std;
    const int Inf=1e9;
    int read()
    {
    	int s=0,m=0;char ch=getchar();
    	while(ch<'0'||ch>'9'){if(ch=='-')m=1;ch=getchar();}
    	while(ch>='0'&&ch<='9')s=(s<<3)+(s<<1)+(ch^48),ch=getchar();
    	return m?-s:s;
    }
    
    int m,n,Done;
    bitset<N>f[N],g[N];
    
    void Insert(int now)//线性基插入
    {
    	for(int j=1;j<=n;++j)
    	{
    		if(f[now][j])
    		{
    			if(!g[j][j]){g[j]=f[now],Done++;break;}
    			f[now]^=g[j];
    		}
    	}
    }
    
    void Gauss()//高斯消元
    {
    	for(int i=1;i<=n;++i)
    	{
    		for(int j=i+1;j<=n;++j)
    			if(g[i][j])g[i]^=g[j];
    
    		if(g[i][n+1])puts("?y7M#");
    		else puts("Earth");
    	}
    }
    
    int main()
    {
    	n=read(),m=read();
    	char x;int y;
    	for(int i=1;i<=m;++i)
    	{
    		for(int j=1;j<=n;++j)
    			cin>>x,y=x-'0',f[i][j]=y;
    		cin>>x,y=x-'0',f[i][n+1]=y;
    	}
    	for(int i=1;i<=m;++i)
    	{
    		Insert(i);
    		if(Done==n){printf("%d
    ",i);break;}
    	}
    	if(Done!=n){puts("Cannot Determine");return 0;}
    
    	Gauss();
    
    	return 0;
    }
    

    yeh!!!

  • 相关阅读:
    HttpClient request payload post请求
    【Linux】svn添加用户
    手机抓包fiddle4的安装及配置
    【论文笔记】Social Role-Aware Emotion Contagion in Image Social Networks
    【Linux】crontab 定时启动sh
    DIV+CSS网页设计规范
    【机器学习】粗糙集属性约简算法与mRMR算法的本质区别
    【机器学习】DBSCAN Algorithms基于密度的聚类算法
    【机器学习】EM的算法
    【机器学习】K-means聚类算法与EM算法
  • 原文地址:https://www.cnblogs.com/cjoierljl/p/9457136.html
Copyright © 2011-2022 走看看