暴力直接解异或方程组,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中国国家集训队第二次作业]魔法波[高斯消元]的更多相关文章

  1. [tsA1491][2013中国国家集训队第二次作业]家族[并查集]

    m方枚举,并查集O(1)维护,傻逼题,,被自己吓死搞成神题了... #include <bits/stdc++.h> using namespace std; struct tri { i ...

  2. [tsA1490][2013中国国家集训队第二次作业]osu![概率dp+线段树+矩阵乘法]

    这样的题解只能舔题解了,,,qaq 清橙资料里有.. #include <iostream> #include <cstdio> #include <cstdlib> ...

  3. [TS-A1489][2013中国国家集训队第二次作业]抽奖[概率dp]

    概率dp第一题,开始根本没搞懂,后来看了09年汤可因论文才基本搞懂,关键就是递推的时候做差比较一下,考虑新加入的情况对期望值的贡献,然后推推公式(好像还是不太会推qaq...) #include &l ...

  4. [TS-A1487][2013中国国家集训队第二次作业]分配游戏[二分]

    根据题意,设$3n$次比较中胜了$w$次,负了$l$次,平了$d$次,所有场次中胜了$W$次,负了$L$次,平了$D$次.如果一场赢了,那么$w-l$就会$+1$,相同地,$W-L$也会$+1$:如果 ...

  5. [TS-A1486][2013中国国家集训队第二次作业]树[树的重心,点分治]

    首先考虑暴力,可以枚举每两个点求lca进行计算,复杂度O(n^3logn),再考虑如果枚举每个点作为lca去枚举这个点的子树中的点复杂度会大幅下降,如果我们将每个点递归考虑,每次计算过这个点就把这个点 ...

  6. [TS-A1505] [清橙2013中国国家集训队第二次作业] 树 [可持久化线段树,求树上路径第k大]

    按Dfs序逐个插入点,建立可持久化线段树,每次查询即可,具体详见代码. 不知道为什么,代码慢的要死,, #include <iostream> #include <algorithm ...

  7. < < < 2013年国家集训队作业 > > >

    完成题数/总题数:  道/37道 1.  A1504. Book(王迪): 数论+贪心   ★★☆        2013中国国家集训队第二次作业 2.  A1505. 树(张闻涛): 倍增LCA+可 ...

  8. [转] ACM中国国家集训队论文集目录(1999-2009)

    国家集训队1999论文集 陈宏:<数据结构的选择与算法效率——从IOI98试题PICTURE谈起>来煜坤:<把握本质,灵活运用——动态规划的深入探讨>齐鑫:<搜索方法中的 ...

  9. 2017年中国大学生程序设计竞赛-中南地区赛暨第八届湘潭市大学生计算机程序设计大赛题解&源码(A.高斯消元,D,模拟,E,前缀和,F,LCS,H,Prim算法,I,胡搞,J,树状数组)

    A------------------------------------------------------------------------------------ 题目链接:http://20 ...

随机推荐

  1. POJ3090 巧用欧拉函数 phi(x)

    POJ3090 给定一个坐标系范围 求不同的整数方向个数 分析: 除了三个特殊方向(y轴方向 x轴方向 (1,1)方向)其他方向的最小向量表示(x,y)必然互质 所以对欧拉函数前N项求和 乘2(关于( ...

  2. [Swift通天遁地]六、智能布局-(4)给视图添加锚点约束

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  3. Unity项目 - 吃豆人Pacman

    项目展示 Github项目地址:Pacman 涉及知识 切片制作 Animations 状态机设置,any state切换,重写状态机 按键读取进行整数距离的刚体移动 用射线检测碰撞性 渲染顺序问题 ...

  4. Entity Framework 4.3 中使用存储过程

    尽管 Entity Framework 4.3 都已经发布了,且表示在 EF 5 中性能将会有很大提升.但很多存储过程控,始终不会放弃使用存储过程,那今天就让我们看看在 EF 4.3 中怎么使用存储过 ...

  5. Appium Appium 链接夜神模拟器

    在此之前,已经安装Appium,参考第一部分在 Windows7 搭建 Appium (一) https://testerhome.com/topics/8004 第一步安装Android开发环境 下 ...

  6. 【原】cocos2d-x开发笔记:获取Sprite上某一个点的透明度,制作不规则按钮

    本篇文章主要讲一下怎么做一个不规则的按钮,比如如下图的八卦,点击绿色和点击红色部分,需要执行不同的事件

  7. js基础---数字日期及运算

    显示年月日 var a=new Date; console.log(a); var year=a.getFullYear(); var month=a.getMonth()+1; var day=a. ...

  8. html用过标签记录

    nowrap="nowrap" //用于列表中td不许换行 maxlength="100" //用于输入框的长度限制 colspan="2" ...

  9. 巧用Eclipse Java编辑器调试

    在使用Eclipse开发Java Web应用时,使用的编辑器不但能够为开发者提供代码编写.辅助提示和实时编译等常用功能,而且还能够对Java源代码进行快捷修改.重构和语法纠错等高级操作.通过Eclip ...

  10. MYSQL 使用自定义表变量

    mysql  用户自定义表变量,ENGINE=MyISAM DEFAULT CHARSET=gb2312; 制定编码方式,防止乱码 DROP TABLE IF EXISTS p_temp; creat ...