hdu 5386 Cover

Description

You have an matrix.Every grid has a color.Now there are two types of operating:

L x y: for(int i=1;i<=n;i++)color[i][x]=y;

H x y:for(int i=1;i<=n;i++)color[x][i]=y;

Now give you the initial matrix and the goal matrix.There are operatings.Put in order to arrange operatings,so that the initial matrix will be the goal matrix after doing these operatings

It’s guaranteed that there exists solution.

Input

There are multiple test cases,first line has an integer

For each case:

First line has two integer ,

Then lines,every line has integers,describe the initial matrix

Then lines,every line has integers,describe the goal matrix

Then lines,every line describe an operating

Output

For each case,print a line include integers.The i-th integer x show that the rank of x-th operating is

Sample Input

1

3 5

2 2 1

2 3 3

2 1 3

3 3 3

3 3 3

3 3 3

H 2 3

L 2 2

H 3 3

H 1 3

L 2 3

Sample Output

5 2 4 3 1

题目大意:给你n×n的初始图形,和目标图形,还有m个操作,操作和一把一行或一列变成一种颜色。如今问使初始图形变成目标图形的操作的顺序。每一个操作都要用上,且一定有解。

解题思路:初始图形没实用。直接从目标图形開始进行操作。

对于一个操作。推断该操作相应的那一行或一列的颜色,是否除0之外所有都是与该操作变换的颜色同样,是的话,将那一行或一列所有变为0,而且记录该操作,最后逆序输出。

注意,把所有操作遍历一遍是不够的。由于有一些操作是要在别的操作已进行过的基础上才干进行。所以在遍历操作的外层要再加一层循环(cnt

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <cstdlib>
using namespace std; const int N = 205;
const int M = 2005;
typedef long long ll;
int ans[M];
int G1[N][N], G2[N][N];
struct Node{
int pos, val, id;
}H[M], L[M];
int n, m, cntH, cntL; void init() {
memset(L, 0, sizeof(L));
memset(H, 0, sizeof(H));
memset(G2, 0, sizeof(G2));
cntH = cntL = 0;
} void input() {
scanf("%d %d", &n, &m);
int a, b;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
scanf("%d", &G1[i][j]);
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
scanf("%d", &G2[i][j]);
}
}
char s[20];
for (int i = 1; i <= m; i++) {
scanf("%s", s);
scanf("%d %d", &a, &b);
if (strcmp(s, "H") == 0) {
H[cntH].pos = a;
H[cntH].val = b;
H[cntH++].id = i;
} else {
L[cntL].pos = a;
L[cntL].val = b;
L[cntL++].id = i;
}
}
} void solve() {
int cnt = 0;
while (cnt < m) {
for (int i = 0; i < cntH; i++) {
int k = H[i].pos, flag = 1;
if (!k) continue;
for (int j = 1; j <= n; j++) {
if(G2[k][j] && G2[k][j] != H[i].val) {
flag = 0;
break;
}
}
if(flag) {
ans[cnt++] = H[i].id;
for(int j = 1; j <= n; j++) G2[k][j] = 0;
H[i].pos = 0;
}
}
for (int i = 0; i < cntL; i++) {
int k = L[i].pos, flag = 1;
if (!k) continue;
for(int j = 1; j <= n; j++) {
if(G2[j][k] && G2[j][k] != L[i].val) {
flag = 0;
break;
}
}
if(flag) {
ans[cnt++] = L[i].id;
for(int j = 1; j <= n; j++) G2[j][k] = 0;
L[i].pos = 0;
}
}
}
for (int i = m - 1; i >= 1; i--) printf("%d ", ans[i]);
printf("%d\n", ans[0]);
} int main() {
int T;
scanf("%d", &T);
while (T--) {
init();
input();
solve();
}
return 0;
}

hdu 5386 Cover (暴力)的更多相关文章

  1. HDU 5386 Cover

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5386 题目大意:给一个初始矩阵(n×n).一个目标矩阵(n×n)和m个操作,要求找到一种操作顺序,使初 ...

  2. HDU 5386 Cover(模拟)

    Cover Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Subm ...

  3. 暴力/思维 HDOJ 5386 Cover

    题目传送门 /* 题意:给出刷墙的所有的方法,求一种顺序,使得原矩阵刷成目标矩阵 暴力:(题解)我们只要每次找一行或一列颜色除了0都相同的,然后如果有对应的操作,就把这行这列都赋值成0即可 */ /* ...

  4. HDU 6311 Cover (无向图最小路径覆盖)

    HDU 6311 Cover (无向图最小路径覆盖) Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/ ...

  5. HDU 5386 暴力

    题目 也是个坑题,可惜没有发现这是个水题,被矩阵的气势吓住了,其实后来做出来的人挺多,就应该想到没那么难了.(两个队友陷入DP无法自拔,没有想换题的打算). 题意:告诉初始矩阵,目的矩阵,告诉n个步骤 ...

  6. hdoj 5386 Cover

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5386 倒着推的一个挺暴力的题,看着和数学有关系,然而并没有, 不要一看到含有数学元素就考虑这是一个数学 ...

  7. HDU 5510 Bazinga 暴力匹配加剪枝

    Bazinga Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5510 ...

  8. HDU 5522 Numbers 暴力

    Numbers Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5522 ...

  9. hdu 5077 NAND(暴力打表)

    题目链接:hdu 5077 NAND 题目大意:Xiaoqiang要写一个编码程序,然后依据x1,x2,x3的值构造出8个字符.如今给定要求生成的8个字符.问 说Xiaoqiang最少要写多少行代码. ...

随机推荐

  1. 用闭包方式实现点击a标签弹也索引值

    var self = document.getElementsByTagName("a"); for(var i=0;i<self.length;i++){ self[i]. ...

  2. zabbix监控tcp连接并发数

    第一步,想在zabbix的web监控tcp连接数,那么要看zabbix-server的版本和zabbix-agent版本是否一致,不然TCP-status图没有数据 也会报错.下图就是版本不符合报错的 ...

  3. 模态对话框与非模态对话框(modeless)

    对话框有两种创建方式:DoModal和Creat. 其中DoModal创建的是模态的对话框,而Creat创建的是非模态的对话框下面总结下他们的不同. 对于模态的对话框,在该对话框被关闭前,用户将不能在 ...

  4. Centos7配置ThinkPHP5.0完整过程(一)

    在Centos中配置PHP服务器环境,首先要安装Apache的http服务,然后安装php解析环境,最后再配置ThinkPHP5.0. 首先安装HTTP sudo yum install httpd ...

  5. 查看用户的信息文件-passwd

    passwd 文件 位置:/etc/passwd 作用:用于保存用户的账户信息 注意点:由于passwd也可以作为一个命令直接使用,也可以作为配置文件,所以如果使用man命令进行查看帮助信息时,应该有 ...

  6. js 技巧 (十)广告JS代码效果大全 【1】

    广告JS代码效果大全 1.[普通效果]     现在很多网站广告做的如火如荼,现在我就来介绍一下常见的对联浮动广告效果的代码使用方法,介绍的这种效果,在1024*768分辨率下正常显示,在800*60 ...

  7. centos passwo文件被删除

    错误提示 该问题一般由/etc/passwd被清空,删除,移动,改名等造成,需要通过救援模式恢复,操作步骤如下 真实环境已经解决,这里使用vmware模拟.光盘启动,选择救援模式: 语言选择,键盘布局 ...

  8. Python:安装3.6

    centos7 自带有 python,但是却是 python2 版本的 python,如果你想安装个python3怎么办呢?难道要从github上把源码clone下来进行编译安装么?没错!因为 yum ...

  9. mycat——未完成

    https://www.cnblogs.com/joylee/p/7513038.html https://blog.csdn.net/wrs120/article/details/80417345 ...

  10. mysql 替换数据库字段内容

    去掉数据库字段单引号 update company_info set company=REPLACE(company,"'","");