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

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

  1. #include<bits/stdc++.h>
  2. #define rep(i,a,b) for(int i=a;i<=b;i++)
  3. using namespace std;
  4. int a[][],ans[];
  5. int x[]={,,,,-};
  6. int y[]={,,-,,};
  7. bool Guass(int N)
  8. {
  9. rep(i,,N-){
  10. int mark=i;
  11. rep(j,i+,N-) if(abs(a[j][i])>abs(a[mark][i])) mark=j;
  12. if(mark!=i) rep(j,,N) swap(a[i][j],a[mark][j]);
  13. if(!a[i][i]) continue;
  14. rep(j,i+,N){
  15. if(!a[j][i]) continue;
  16. rep(k,i,N){
  17. a[j][k]^=a[i][k];
  18. }
  19. }
  20. }
  21. for(int i=N-;i>=;i--){
  22. if(!a[i][i]&&a[i][N]) return false;//无解
  23. ans[i]=a[i][N]&a[i][i];
  24. rep(j,,i-) a[j][N]^=(a[j][i]&ans[i]);
  25. }
  26. return true;
  27. }
  28. char c[][];
  29. int main()
  30. {
  31. int T,N;
  32. scanf("%d",&T);
  33. while(T--){
  34. memset(a,,sizeof(a));
  35. scanf("%d",&N);
  36. rep(i,,N-) scanf("%s",c[i]);
  37. rep(i,,N-)
  38. rep(j,,N-) a[i*N+j][N*N]=(c[i][j]!='y');
  39. rep(i,,N-)
  40. rep(j,,N-) {
  41. int t=i*N+j;
  42. rep(k,,) {
  43. if(i+x[k]>=&&i+x[k]<N&&j+y[k]>=&&j+y[k]<N){
  44. a[(i+x[k])*N+j+y[k]][t]=;
  45. }
  46. }
  47. }
  48. if(Guass(N*N)){
  49. int res=;
  50. rep(i,,N*N-) res+=ans[i];
  51. printf("%d\n",res);
  52. }
  53. else puts("inf");
  54. }
  55. return ;
  56. }

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. mysql 自定义插件调试

    # 创建表的stack frame #0: 0x000000011d11f58a ha_spartan.so`Spartan_data::create_table(this=0x00007f9fc13 ...

  2. mysql语句将日期转换为时间戳的方法

    mysql将日期转换为时间戳更新数据库: update test set creattime=UNIX_TIMESTAMP('2018-04-19') 替换字段为当前日期: update test s ...

  3. java按照指定格式输出系统时间

    public class TimeFour { public static void main(String[] args) throws ParseException{ TimeFour four ...

  4. Android反编译apk并重新打包签名(Mac环境)

    工具下载 apktool :https://ibotpeaches.github.io/Apktool/install dex2jar:https://github.com/pxb1988/dex2j ...

  5. python学习------面向对象的程序设计

    一 面向对象的程序设计的由来 1940年以前:面向机器 最早的程序设计都是采用机器语言来编写的,直接使用二进制码来表示机器能够识别和执行的指令和数 据.简单来说,就是直接编写 和 的序列来代表程序语言 ...

  6. 测试新手之linux问题整理

    测试职场的新人,难免都会涉及到一些linux系统的命令操作,搭建测试环境也好,查看日志也罢,以下给大家整理初学者可能会碰到的问题,希望对大家有所帮助. 1.Linux中输入基本操作命令例如ls,遇到报 ...

  7. FastReport导出PDF乱码的问题

    1.电脑查看乱码,替换文本控件,使用RichObject,而不使用TextObject 2.电脑查看正常,手机查看乱码,导出的时候选择包含字体: Enbeded Fonts勾选框

  8. C++ 之sizeof运算符

    sizeof运算符用来计算某个对象在内存中占用的字节数. 此运算符的使用形式为:sizeof(类型名)或sizeof(表达式). 计算结果是这个类型或者这个表达式结果在内存中占的字节数.

  9. 把玩Fedora29操作系统

    reference:   https://ask.csdn.net/questions/657608 1.下载Fedora服务器版操作系统 https://getfedora.org/zh_CN/se ...

  10. 最佳sql server 分页查询

    用关键字查询 并作为条件是最快的,比其他嵌套select性能都要好 select top 100 id , name from tablex where id >preid order by i ...