POJ - 1681: Painter's Problem (开关问题-高斯消元)
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 (开关问题-高斯消元)的更多相关文章
- POJ 1681 Painter's Problem 【高斯消元 二进制枚举】
任意门:http://poj.org/problem?id=1681 Painter's Problem Time Limit: 1000MS Memory Limit: 10000K Total ...
- POJ 1681 Painter's Problem(高斯消元+枚举自由变元)
http://poj.org/problem?id=1681 题意:有一块只有黄白颜色的n*n的板子,每次刷一块格子时,上下左右都会改变颜色,求最少刷几次可以使得全部变成黄色. 思路: 这道题目也就是 ...
- poj 1681 Painter's Problem
Painter's Problem 题意:给一个n*n(1 <= n <= 15)具有初始颜色(颜色只有yellow&white两种,即01矩阵)的square染色,每次对一个方格 ...
- POJ 3185 The Water Bowls 【一维开关问题 高斯消元】
任意门:http://poj.org/problem?id=3185 The Water Bowls Time Limit: 1000MS Memory Limit: 65536K Total S ...
- POJ 1830 开关问题 高斯消元,自由变量个数
http://poj.org/problem?id=1830 如果开关s1操作一次,则会有s1(记住自己也会变).和s1连接的开关都会做一次操作. 那么设矩阵a[i][j]表示按下了开关j,开关i会被 ...
- POJ - 1222: EXTENDED LIGHTS OUT (开关问题-高斯消元)
pro:给定5*6的灯的状态,如果我们按下一个灯的开关,它和周围4个都会改变状态.求一种合法状态,使得终状态全为关闭: sol:模2意义下的高斯消元. 终于自己手打了一个初级板子. #include& ...
- POJ 1166 The Clocks (爆搜 || 高斯消元)
题目链接 题意: 输入提供9个钟表的位置(钟表的位置只能是0点.3点.6点.9点,分别用0.1.2.3)表示.而题目又提供了9的步骤表示可以用来调正钟的位置,例如1 ABDE表示此步可以在第一.二.四 ...
- Problem A: Apple(高斯消元)
可以发现具有非常多的方程, 然后高斯消元就能85分 然而我们发现这些方程组成了一些环, 我们仅仅设出一部分变量即可获得N个方程, 就可以A了 trick 合并方程 #include <cstdi ...
- 【POJ】1222 EXTENDED LIGHTS OUT(高斯消元)
http://poj.org/problem?id=1222 竟然我理解了两天..... 首先先来了解异或方程组(或者说mod2方程组,modk的话貌似可以这样拓展出来) 对于一些我们需要求出的变量a ...
随机推荐
- mysql 自定义插件调试
# 创建表的stack frame #0: 0x000000011d11f58a ha_spartan.so`Spartan_data::create_table(this=0x00007f9fc13 ...
- mysql语句将日期转换为时间戳的方法
mysql将日期转换为时间戳更新数据库: update test set creattime=UNIX_TIMESTAMP('2018-04-19') 替换字段为当前日期: update test s ...
- java按照指定格式输出系统时间
public class TimeFour { public static void main(String[] args) throws ParseException{ TimeFour four ...
- Android反编译apk并重新打包签名(Mac环境)
工具下载 apktool :https://ibotpeaches.github.io/Apktool/install dex2jar:https://github.com/pxb1988/dex2j ...
- python学习------面向对象的程序设计
一 面向对象的程序设计的由来 1940年以前:面向机器 最早的程序设计都是采用机器语言来编写的,直接使用二进制码来表示机器能够识别和执行的指令和数 据.简单来说,就是直接编写 和 的序列来代表程序语言 ...
- 测试新手之linux问题整理
测试职场的新人,难免都会涉及到一些linux系统的命令操作,搭建测试环境也好,查看日志也罢,以下给大家整理初学者可能会碰到的问题,希望对大家有所帮助. 1.Linux中输入基本操作命令例如ls,遇到报 ...
- FastReport导出PDF乱码的问题
1.电脑查看乱码,替换文本控件,使用RichObject,而不使用TextObject 2.电脑查看正常,手机查看乱码,导出的时候选择包含字体: Enbeded Fonts勾选框
- C++ 之sizeof运算符
sizeof运算符用来计算某个对象在内存中占用的字节数. 此运算符的使用形式为:sizeof(类型名)或sizeof(表达式). 计算结果是这个类型或者这个表达式结果在内存中占的字节数.
- 把玩Fedora29操作系统
reference: https://ask.csdn.net/questions/657608 1.下载Fedora服务器版操作系统 https://getfedora.org/zh_CN/se ...
- 最佳sql server 分页查询
用关键字查询 并作为条件是最快的,比其他嵌套select性能都要好 select top 100 id , name from tablex where id >preid order by i ...