[TS-A1488][2013中国国家集训队第二次作业]魔法波[高斯消元]
暴力直接解异或方程组,O(n^6)无法接受,那么我们考虑把格子分块,横着和竖着分别分为互不影响的块,这样因为障碍物最多不超过200个,那么块的个数最多为2*(800+200)=2000个,最后用bitset优化即可。
#include <bits/stdc++.h> using namespace std; int n,cnt,Pos[],Right[],Left[];
int Crs[][],Dwn[][],MID;
char str[][]; bitset<>eq[]; void Gauss()
{
int i,j;
for(i=;i<=cnt;++i)
{
j=i;
while(!eq[j][i] && j<=cnt)j++;
if(j==cnt+)continue;
if(j!=i)swap(eq[j],eq[i]);
for(j=;j<=cnt;++j)
if(j!=i && eq[j][i])eq[j]^=eq[i];
}
return ;
} int main()
{
int i,j,temp; scanf("%d",&n); for(i=;i<=n;++i)
scanf("%s",str[i]+); for(i=;i<=n;++i)
str[][i]=str[i][]=str[i][n+]=str[n+][i]='X'; cnt=; for(j=;j<=n;++j) for(i=;i<=n+;++i)
{
if(str[i][j]!='X')Crs[i][j]=cnt;
if(str[i-][j]=='X' && str[i][j]!='X')Left[cnt]=i,Pos[cnt]=j;
if(str[i+][j]=='X' && str[i][j]!='X')Right[cnt]=i,cnt++;
} MID=cnt-; for(i=;i<=n;++i) for(j=;j<=n+;++j)
{
if(str[i][j]!='X')Dwn[i][j]=cnt;
if(str[i][j-]=='X' && str[i][j]!='X')Left[cnt]=j,Pos[cnt]=i;
if(str[i][j+]=='X' && str[i][j]!='X')Right[cnt]=j,cnt++;
} cnt--; for(i=;i<=MID;++i)
{
temp=;
eq[i].set(i); for(j=Left[i];j<=Right[i];++j)
{
eq[i][Crs[j][Pos[i]]]=eq[i][Crs[j][Pos[i]]]^;
eq[i][Dwn[j][Pos[i]]]=eq[i][Dwn[j][Pos[i]]]^;
temp^=(str[j][Pos[i]]=='X'?:str[j][Pos[i]]-);
temp^=;
} eq[i][cnt+]=temp;
#ifdef Debug
cerr << eq[i] << endl;
#endif
} for(i=MID+;i<=cnt;++i)
{
temp=;
eq[i].set(i); for(j=Left[i];j<=Right[i];++j)
{
eq[i][Crs[Pos[i]][j]]=eq[i][Crs[Pos[i]][j]]^;
eq[i][Dwn[Pos[i]][j]]=eq[i][Dwn[Pos[i]][j]]^;
temp^=(str[Pos[i]][j]=='X'?:str[Pos[i]][j]-);
temp^=;
} eq[i][cnt+]=temp;
#ifdef Debug
cerr << eq[i] << endl;
#endif
} Gauss(); #ifdef Debug
cerr << endl;
for(i=;i<=cnt;++i)
cerr << eq[i] << endl;
cerr << endl;
#endif for(i=;i<=n;++i)
{
for(j=;j<=n;++j)
{
printf("%d",str[i][j]=='X'?:(^eq[Crs[i][j]][cnt+]^eq[Dwn[i][j]][cnt+]
^(str[i][j]-)));
}
printf("\n");
} return ;
}
[TS-A1488][2013中国国家集训队第二次作业]魔法波[高斯消元]的更多相关文章
- [tsA1491][2013中国国家集训队第二次作业]家族[并查集]
m方枚举,并查集O(1)维护,傻逼题,,被自己吓死搞成神题了... #include <bits/stdc++.h> using namespace std; struct tri { i ...
- [tsA1490][2013中国国家集训队第二次作业]osu![概率dp+线段树+矩阵乘法]
这样的题解只能舔题解了,,,qaq 清橙资料里有.. #include <iostream> #include <cstdio> #include <cstdlib> ...
- [TS-A1489][2013中国国家集训队第二次作业]抽奖[概率dp]
概率dp第一题,开始根本没搞懂,后来看了09年汤可因论文才基本搞懂,关键就是递推的时候做差比较一下,考虑新加入的情况对期望值的贡献,然后推推公式(好像还是不太会推qaq...) #include &l ...
- [TS-A1487][2013中国国家集训队第二次作业]分配游戏[二分]
根据题意,设$3n$次比较中胜了$w$次,负了$l$次,平了$d$次,所有场次中胜了$W$次,负了$L$次,平了$D$次.如果一场赢了,那么$w-l$就会$+1$,相同地,$W-L$也会$+1$:如果 ...
- [TS-A1486][2013中国国家集训队第二次作业]树[树的重心,点分治]
首先考虑暴力,可以枚举每两个点求lca进行计算,复杂度O(n^3logn),再考虑如果枚举每个点作为lca去枚举这个点的子树中的点复杂度会大幅下降,如果我们将每个点递归考虑,每次计算过这个点就把这个点 ...
- [TS-A1505] [清橙2013中国国家集训队第二次作业] 树 [可持久化线段树,求树上路径第k大]
按Dfs序逐个插入点,建立可持久化线段树,每次查询即可,具体详见代码. 不知道为什么,代码慢的要死,, #include <iostream> #include <algorithm ...
- < < < 2013年国家集训队作业 > > >
完成题数/总题数: 道/37道 1. A1504. Book(王迪): 数论+贪心 ★★☆ 2013中国国家集训队第二次作业 2. A1505. 树(张闻涛): 倍增LCA+可 ...
- [转] ACM中国国家集训队论文集目录(1999-2009)
国家集训队1999论文集 陈宏:<数据结构的选择与算法效率——从IOI98试题PICTURE谈起>来煜坤:<把握本质,灵活运用——动态规划的深入探讨>齐鑫:<搜索方法中的 ...
- 2017年中国大学生程序设计竞赛-中南地区赛暨第八届湘潭市大学生计算机程序设计大赛题解&源码(A.高斯消元,D,模拟,E,前缀和,F,LCS,H,Prim算法,I,胡搞,J,树状数组)
A------------------------------------------------------------------------------------ 题目链接:http://20 ...
随机推荐
- poj2115 C Looooops——扩展欧几里得
题目:http://poj.org/problem?id=2115 就是扩展欧几里得呗: 然而忘记除公约数... 代码如下: #include<iostream> #include< ...
- spark 操作Hive时遇到的问题
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).17/10/14 ...
- Parlay Wagering
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2833 题意:讲述了一种投小钱赢大钱的赌博方式, ...
- 基于ASP.Net Core开发一套通用后台框架记录-(项目的搭建)
写在前面 本系列博客是本人在学习的过程中搭建学习的记录,如果对你有所帮助那再好不过.如果您有发现错误,请告知我,我会第一时间修改. 前期我不会公开源码,我想是一点点敲代码,不然复制.粘贴那就没意思了. ...
- HTML--form表单中的label标签
小伙伴们,你们在前面学习表单各种控件的时候,有没有发现一个标签--label,这一小节就来揭晓它的作用. label标签不会向用户呈现任何特殊效果,它的作用是为鼠标用户改进了可用性.如果你在 labe ...
- flask 中的模板语法 jinja2及render_template的深度用法
是时候开始写个前端了,Flask中默认的模板语言是Jinja2 现在我们来一步一步的学习一下 Jinja2 捎带手把 render_template 中留下的疑问解决一下 首先我们要在后端定义几个字符 ...
- 协程概念,原理及实现(c++和node.js实现)
协程 什么是协程 wikipedia 的定义: 协程是一个无优先级的子程序调度组件,允许子程序在特点的地方挂起恢复. 线程包含于进程,协程包含于线程.只要内存足够,一个线程中可以有任意多个协程,但某一 ...
- cplusplus系列>utility>pair
http://www.cplusplus.com/reference/utility/pair/ 用于存储一对异构对象 // Compile: g++ -std=c++11 pair.cpp #inc ...
- 【Spring】IOC
浅谈IOC IOC的理论背景 图1:传统系统中,对象之间相互引用的一幅图,在采用面向对象方法设计的软件系统中,它的底层的实现都是由n个对象所组成的,所有的对象通彼此之间的合作最终实现系统的业务逻辑,如 ...
- 04--Spring知识汇总
1. @Autowried注解 Spring 2.5 引入了 @Autowired 注释,它可以对类成员变量.方法及构造函数进行标注,完成自动装配的工作. 通过 @Autowired的使用来消除 se ...