pro:开关问题,同上一题。 不过只要求输出最小的操作步数,无法完成输出“inf”

sol:高斯消元的解对应的一组合法的最小操作步数。

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
int a[][],ans[];
int x[]={,,,,-};
int y[]={,,-,,};
bool Guass(int N)
{
rep(i,,N-){
int mark=i;
rep(j,i+,N-) if(abs(a[j][i])>abs(a[mark][i])) mark=j;
if(mark!=i) rep(j,,N) swap(a[i][j],a[mark][j]);
if(!a[i][i]) continue;
rep(j,i+,N){
if(!a[j][i]) continue;
rep(k,i,N){
a[j][k]^=a[i][k];
}
}
}
for(int i=N-;i>=;i--){
if(!a[i][i]&&a[i][N]) return false;//无解
ans[i]=a[i][N]&a[i][i];
rep(j,,i-) a[j][N]^=(a[j][i]&ans[i]);
}
return true;
}
char c[][];
int main()
{
int T,N;
scanf("%d",&T);
while(T--){
memset(a,,sizeof(a));
scanf("%d",&N);
rep(i,,N-) scanf("%s",c[i]);
rep(i,,N-)
rep(j,,N-) a[i*N+j][N*N]=(c[i][j]!='y');
rep(i,,N-)
rep(j,,N-) {
int t=i*N+j;
rep(k,,) {
if(i+x[k]>=&&i+x[k]<N&&j+y[k]>=&&j+y[k]<N){
a[(i+x[k])*N+j+y[k]][t]=;
}
}
}
if(Guass(N*N)){
int res=;
rep(i,,N*N-) res+=ans[i];
printf("%d\n",res);
}
else puts("inf");
}
return ;
}

POJ - 1681: Painter's Problem (开关问题-高斯消元)的更多相关文章

  1. POJ 1681 Painter's Problem 【高斯消元 二进制枚举】

    任意门:http://poj.org/problem?id=1681 Painter's Problem Time Limit: 1000MS   Memory Limit: 10000K Total ...

  2. POJ 1681 Painter's Problem(高斯消元+枚举自由变元)

    http://poj.org/problem?id=1681 题意:有一块只有黄白颜色的n*n的板子,每次刷一块格子时,上下左右都会改变颜色,求最少刷几次可以使得全部变成黄色. 思路: 这道题目也就是 ...

  3. poj 1681 Painter's Problem

    Painter's Problem 题意:给一个n*n(1 <= n <= 15)具有初始颜色(颜色只有yellow&white两种,即01矩阵)的square染色,每次对一个方格 ...

  4. POJ 3185 The Water Bowls 【一维开关问题 高斯消元】

    任意门:http://poj.org/problem?id=3185 The Water Bowls Time Limit: 1000MS   Memory Limit: 65536K Total S ...

  5. POJ 1830 开关问题 高斯消元,自由变量个数

    http://poj.org/problem?id=1830 如果开关s1操作一次,则会有s1(记住自己也会变).和s1连接的开关都会做一次操作. 那么设矩阵a[i][j]表示按下了开关j,开关i会被 ...

  6. POJ - 1222: EXTENDED LIGHTS OUT (开关问题-高斯消元)

    pro:给定5*6的灯的状态,如果我们按下一个灯的开关,它和周围4个都会改变状态.求一种合法状态,使得终状态全为关闭: sol:模2意义下的高斯消元. 终于自己手打了一个初级板子. #include& ...

  7. POJ 1166 The Clocks (爆搜 || 高斯消元)

    题目链接 题意: 输入提供9个钟表的位置(钟表的位置只能是0点.3点.6点.9点,分别用0.1.2.3)表示.而题目又提供了9的步骤表示可以用来调正钟的位置,例如1 ABDE表示此步可以在第一.二.四 ...

  8. Problem A: Apple(高斯消元)

    可以发现具有非常多的方程, 然后高斯消元就能85分 然而我们发现这些方程组成了一些环, 我们仅仅设出一部分变量即可获得N个方程, 就可以A了 trick 合并方程 #include <cstdi ...

  9. 【POJ】1222 EXTENDED LIGHTS OUT(高斯消元)

    http://poj.org/problem?id=1222 竟然我理解了两天..... 首先先来了解异或方程组(或者说mod2方程组,modk的话貌似可以这样拓展出来) 对于一些我们需要求出的变量a ...

随机推荐

  1. Mybatis中#与$区别

    #{}:使用 #{} 格式的语法会导致 MyBatis 创建 PreparedStatement 参数占位符并安全地设置参数(就像使用 ? 一样) ${}:使用 ${} 会在sql语句中插入一个不转义 ...

  2. js for in循环遍历对象,获取key:value值

    var testObj = { 'a':'111', 'b':'222', 'c':'333', 'd':'444'}for(var i in testObj){ console.log(i); // ...

  3. PROJ.4学习——坐标系转换

    PROJ.4学习——坐标系转换 前言 PROJ可以做任从最简单的投影到许多参考数据非常复杂的转换.PROJ最初是作为地图投影工具开发的,但随着时间的推移,它已经发展成为一个强大的通用坐标转换引擎,可以 ...

  4. sqlserverdatasouce控件如何让添加删除修改自动化

    对于sqlserverdatasouce控件,添加插入修改和删除命令,可以自动删除修改更新数据,不需要编写一行代码,但是有时更新失败,原因在于选中了[开放式并发],这个选中,如果该表与其他的数据表关联 ...

  5. 自动化扫描src漏洞

    首先介绍一下常见的漏洞类型: 漏洞自动扫描思路: 常见的一些github上常用的漏洞采集工具,我们可以利用一款工具进行接口调用直接进行利用 自动化工具的雏形:

  6. js 两数的最大公约数

    function gcd(a,b){ if (b == 0){ return a; } var r = parseInt(a % b) ; return gcd(b, r);}gcd(12,5);

  7. 使用turtle画故宫(伍奇,侯俊豪小组)

    这个代码主要有两个部分,第一部分是画出故宫,第二部分是用random函数随机画心,故宫部分设置多个函数和循环再进行颜色填充即可完成. 此处为视频链接 from turtle import* impor ...

  8. Possibly two send backs are happening for the same request

    错误 wso2 WARN {org.apache.synapse.transport.passthru.SourceHandler} -  Illegal incoming connection st ...

  9. 1 实现添加功能 1.1 定义一个学员类(Student),在Student类中定义姓名、性别和年龄属性,定义有 参数的构造方法来初始化所以的成员属性 1.2 创建学员类对象来存放学员信息,并且为每一个学生对象添加的相应的编号。并将 学员类对象添加到Map<Integer,Student>集合中 1.3 添加完成后,显示所有已添加的学员姓名 1.4 限制年龄文本框只能输入正整数,否则的会采

    学生类 package com.lanxi.demo1_3; public class Student { private String name; private String sex; priva ...

  10. oracle中创建数据库

    一.在Oracle中创建数据库之前先改一下虚拟机的IP地址,以便访问 2. 3. 3.1 3.2 3.3 3.4 创建完成:输入sqlplus sys/123456 as sysdba测试