0x35 高斯消元与线性空间
颓了十天回来做题果然……
感觉还是很有收获的,这两以前都没学过
bzoj1013: [JSOI2008]球形空间产生器sphere
poj1830(upd)
之前做得很烂还被 D飞*2 了。。重做一次
对于一个灯,把能把它点亮的其他灯设为1,然后高斯消元。
注意在这里的系数只是一个判断的手段,判断是否受到影响,并不是参与运算的(之前纠结了很久)
用二进制状压判断无解多解比较方便。(之前直接判当前位是不是0直接break错的一逼)
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std; int n,q[];
void guess()
{
for(int j=;j<=n;j++)
{
for(int i=j+;i<=n;i++)
if(q[i]>q[j])swap(q[i],q[j]);
if(q[j]<=)
{
if(q[j]==)printf("%d\n", (<<(n-j+)) );
else if(q[j]==)printf("Oh,it's impossible~!!\n");
return ;
} int z;
for(int i=n;i>=;i--)
if(q[j]&(<<i)){z=i;break;}
for(int i=;i<=n;i++)
{
if(i==j)continue;
if(q[i]&(<<z))q[i]^=q[j];
}
}
printf("1\n");
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int x,y;
scanf("%d",&n);
memset(q,,sizeof(q));
for(int i=;i<=n;i++)scanf("%d",&x),q[i]^=x;
for(int i=;i<=n;i++)scanf("%d",&x),q[i]^=x;
for(int i=;i<=n;i++)q[i]|=(<<i);
while(scanf("%d%d",&x,&y)!=EOF)
{
if(x==&&y==)break;
q[y]|=(<<x);
}
guess();
}
return ;
}
poj1830
hdu3949(upd):没开LL见祖宗系列(记得是1LL<<i啊)
裸的线性基,但是求第k大的时候稍微注意下,求第k大的时候实际上求的是第k+1大,因为0会被看作第0大的……而且0需要特判存不存在,假如存在那么k--,否则这里就和前面的多算抵消了
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
typedef unsigned long long uLL; uLL lt[],zero;
void insert(uLL x)
{
for(int i=;i>=;i--)
if(x&(1LL<<i))
{
if(lt[i]==){lt[i]=x;return ;}
else x^=lt[i];
}
zero=;
}
int plen;uLL p[];
void rebuild()
{
for(int i=;i>=;i--)
if(lt[i]>)
{
for(int j=i-;j>=;j--)
if(lt[i]&(1LL<<j))lt[i]^=lt[j];
}
plen=;
for(int i=;i<=;i++)
if(lt[i]>)p[++plen]=lt[i];
}
void findkth(uLL x)
{
if(x>=(1LL<<plen)){printf("-1\n");return ;}
uLL ans=;
for(int i=plen;i>=;i--)
if(x&(1LL<<i-))ans^=p[i];
printf("%I64u\n",ans);
} int main()
{
int T,T_T=;
scanf("%d",&T);
while(T--)
{
int n;uLL x;
scanf("%d",&n); zero=;
memset(lt,,sizeof(lt));
for(int i=;i<=n;i++)
scanf("%I64u",&x), insert(x);
rebuild(); int Q;
scanf("%d",&Q);
printf("Case #%d:\n",++T_T);
while(Q--)
{
scanf("%I64u",&x);x-=zero;
findkth(x);
}
}
return ;
}
hdu3949
0x35 高斯消元与线性空间的更多相关文章
- 算法竞赛进阶指南0x35高斯消元与线性空间
高斯消元 目录 高斯消元 ACWing207. 球形空间产生器(点击访问) 求解思路 代码 ACWing208. 开关问题(点击访问) 思路 代码 总结 欣赏 线性空间 定义 ACWing209. 装 ...
- 线性空间和异或空间(线性基)bzoj4004贪心+高斯消元优秀模板
线性空间:是由一组基底构成的所有可以组成的向量空间 对于一个n*m的矩阵,高斯消元后的i个主元可以构成i维的线性空间,i就是矩阵的秩 并且这i个主元线性无关 /* 每个向量有权值,求最小权极大线性无关 ...
- AcWing 209. 装备购买 (高斯消元线性空间)打卡
脸哥最近在玩一款神奇的游戏,这个游戏里有 n 件装备,每件装备有 m 个属性,用向量z[i]=(ai,1,ai,2,..,ai,m)z[i]=(ai,1,ai,2,..,ai,m) 表示,每个装备需要 ...
- 高斯消元 & 线性基【学习笔记】
高斯消元 & 线性基 本来说不写了,但还是写点吧 [update 2017-02-18]现在发现真的有好多需要思考的地方,网上很多代码感觉都是错误的,虽然题目通过了 [update 2017- ...
- [JLOI2015]装备购买 (高斯消元)
[JLOI2015]装备购买 \(solution:\) 首先这道题的题面已经非常清晰的告诉我们这就是线性空间高斯消元的一道题(可以用某些装备来表示另一件装备,这已经不能再明显了),只是这道题要求我们 ...
- 【BZOJ-3143】游走 高斯消元 + 概率期望
3143: [Hnoi2013]游走 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2264 Solved: 987[Submit][Status] ...
- 【BZOJ-3270】博物馆 高斯消元 + 概率期望
3270: 博物馆 Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 292 Solved: 158[Submit][Status][Discuss] ...
- *POJ 1222 高斯消元
EXTENDED LIGHTS OUT Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9612 Accepted: 62 ...
- [bzoj1013][JSOI2008][球形空间产生器sphere] (高斯消元)
Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球 面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧 ...
随机推荐
- SwiftUI 官方教程(四)
SwiftUI 官方教程(四) 4. 自定义 Image View 搞定名称和位置 view 后,我们来给地标添加图片. 这不需要添加很多代码,只需要创建一个自定义 view,然后给图片加上遮罩.边框 ...
- 5.Project常用操作介绍
Project常用操作介绍 1.项目浏览器 2.项目属性 Name:项目名称 Category:项目组织结构 Author:作者 Copyright:版权 Image:项目图标 Description ...
- css中常用的七种三栏布局技巧总结
三栏布局,顾名思义就是两边固定,中间自适应.三栏布局在开发十分常见,那么什么是三栏布局?例如当当网首页边商品导航和右边导航固定宽度,中间的主要内容随浏览器宽度自适应.效果如下图所示: 下面围绕的这样的 ...
- nodejs -- crypto MD5签名
MD5使用方法: const crypto = require('crypto'); var obj = crypto.createHash('md5'); // 可多次调用 update obj.u ...
- javascript中标准事件流addEventListener介绍
addEventListener-开始 前面零散地写了些关于 addEventListener 的内容,觉得比较散,有些地方可能也说得不够清楚明白,所以决定以连载的形式从头到尾再写一篇. addEve ...
- android随手记
Linearlayout: gravity:本元素中所有子元素的重力方向 layout_gravity:本元素对于父元素的重力方向 自定义权限:http://www.cnblogs.com/i ...
- swift 类型备份
Swift语法3.03(类型Types) https://www.jianshu.com/p/839f9bc4b9a3 https://developer.apple.com/library/cont ...
- C#获取硬盘序列号
//创建ManagementObjectSearcher对象 ManagementObjectSearcher searcher = new ManagementObjectSearcher(&quo ...
- macOS 不用任何第三方工具 简单两步使用 Automator 将截图转成@1x
制作 Automator 脚本 打开 Automator -> 选择服务,左侧搜索 shell,双击打开,右侧粘贴以下内容,将上部 服务收到... 改成 没有输入,CMD+S保存,名称就叫 屏幕 ...
- vue.js怎样将时间戳转化为日期格式
<!-- value 格式为13位unix时间戳 --><!-- 10位unix时间戳可通过value*1000转换为13位格式 --> export function for ...