Cover

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 1027    Accepted Submission(s): 351
Special Judge

Problem Description
You have an n∗n 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 m 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 T
For each case:
First line has two integer n,m
Then n lines,every line has n integers,describe the initial matrix
Then n lines,every line has n integers,describe the goal matrix
Then m lines,every line describe an operating

1≤color[i][j]≤n
T=5
1≤n≤100
1≤m≤500

 
Output
For each case,print a line include m integers.The i-th integer x show that the rank of x-th operating is i
 
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个操作。H x z表示将第x行覆盖为z,L x z表示将第x列覆盖为z,保证是有解。问你这m个操作怎么排,可以让初始矩阵变为目标矩阵。

解题思路:遍历m个操作,如果是行操作,就看该行是否都是所要染的颜色或着是0颜色,如果这一行跟要染的颜色一样,那么就存起来操作,同时把该行全部变为0,。由于不是一次下来就能得到结果,所以用一个变量记录已经有多少个操作已经在结果中,最后逆序输出即为答案。

#include<bits/stdc++.h>
using namespace std;
struct Oper{
int r_,x,col;
}opers[550];
int Map[125][125],ans[550],vis[550];
int main(){
int t,a,n,m;
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
scanf("%d",&a);
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
scanf("%d",&Map[i][j]);
}
}
int a,b;
char str[20];
for(int i=1;i<=m;i++){
scanf("%s%d%d",str,&a,&b);
if(str[0]=='H'){
opers[i].r_=1;
opers[i].x=a;
opers[i].col=b;
}else{
opers[i].r_=0;
opers[i].x=a;
opers[i].col=b;
}
}
memset(vis,0,sizeof(vis));
int cnt=0;
while(cnt<m){
for(int i=1;i<=m;i++){
if(!vis[i]){
if(opers[i].r_==1){
int r=opers[i].x,aim=opers[i].col;
int j;
for(j=1;j<=n;j++){
if(Map[r][j]!=aim&&Map[r][j]!=0){
break;
}
}
if(j==n+1){
for(j = 1;j<=n;j++){
Map[r][j]=0;
}
ans[cnt]=i;
cnt++;
vis[i]=1;
}
}else{
int c=opers[i].x,aim=opers[i].col;
int j;
for(j=1;j<=n;j++){
if(Map[j][c]!=aim&&Map[j][c]!=0){
break;
}
}
if(j==n+1){
for(j = 1;j<=n;j++){
Map[j][c]=0;
}
ans[cnt]=i;
cnt++;
vis[i]=1;
}
}
}
}
}
printf("%d",ans[cnt-1]);
for(int i=cnt-2;i>=0;i--){
printf(" %d",ans[i]);
}printf("\n");
}
return 0;
}

  

 

HDU——Cover——————【技巧】的更多相关文章

  1. hdu 5265 技巧题 O(nlogn)求n个数中两数相加取模的最大值

    pog loves szh II Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  2. HDU 4509 湫湫系列故事——减肥记II(线段树-区间覆盖 或者 暴力技巧)

    http://acm.hdu.edu.cn/showproblem.php?pid=4509 题目大意: 中文意义,应该能懂. 解题思路: 因为题目给的时间是一天24小时,而且还有分钟.为了解题方便, ...

  3. HDU 5895 Mathematician QSC(矩阵乘法+循环节降幂+除法取模小技巧+快速幂)

    传送门:HDU 5895 Mathematician QSC 这是一篇很好的题解,我想讲的他基本都讲了http://blog.csdn.net/queuelovestack/article/detai ...

  4. hdu 4864 Task (贪心 技巧)

    题目链接 一道很有技巧的贪心题目. 题意:有n个机器,m个任务.每个机器至多能完成一个任务.对于每个机器,有一个最大运行时间xi和等级yi, 对于每个任务,也有一个运行时间xj和等级yj.只有当xi& ...

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

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

  6. HDU 5884 Sort(二分答案+计算WPL的技巧)

    Sort Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  7. hdu 5386 Cover (暴力)

    hdu 5386 Cover Description You have an matrix.Every grid has a color.Now there are two types of oper ...

  8. HDU 6150 - Vertex Cover | 2017 中国大学生程序设计竞赛 - 网络选拔赛

    思路来自 ICPCCamp /* HDU 6150 - Vertex Cover [ 构造 ] | 2017 中国大学生程序设计竞赛 - 网络选拔赛 题意: 给了你一个贪心法找最小覆盖的算法,构造一组 ...

  9. HDU -2674 N!Again(小技巧)

    这道题有个小技巧,就是既然是n!,那么对2009求余,只要大于2009!,那么一定是0,在仔细想想会发现,根本到不了2009,只要到2009的最大质因数就行了,为什么呢?因为最大质因数是最大的一个不能 ...

随机推荐

  1. java的一些最最最最基本的东西,纯粹是为了保存

    1.方法签名 指的是方法名和参数类型 2.java类初始化数据的方法 构造函数 声明变量时赋值 静态块 3.List转数组 List<String> list = new ArrayLis ...

  2. [Django笔记] views.py 深入学习

    views.py 是django MTV 中的主要逻辑层,相当于MVC中的 Controller 以下的实例都基于这样一个路由表: urlpatterns = [ url(r'^(index)?$', ...

  3. 从零开始安装 Ambari (4) -- 通过 Ambari 部署 hadoop 集群

    1. 打开 http://192.168.242.181:8080  登陆的用户名/密码是 : admin/admin 2. 点击 “LAUNCH INSTALL WIZARD”,开始创建一个集群 3 ...

  4. PHP 符号

    注解符号: // 单行注解 /*      */    多行注解 引号的使用 ’   ’ 单引号,没有任何意义,不经任何处理直接拿过来; " "双引号,PHP动态处理然后输出,一般 ...

  5. APIO 2012 派遣(可并堆)

    APIO 2012 派遣(可并堆) 给定一棵N个点的树和M,每个点有两个权值ai,bi,每次可以选择一个点x,然后在这个点的子树中选若干点(可以不选自己),使得这些点的\(\sum b_i<=M ...

  6. 洛谷P3628 [APIO2010]特别行动队(斜率优化)

    传送门 先写出转移方程$$dp[i]=max\{dp[j]+a*(sum[i]-sum[j])^2+b*(sum[i]-sum[j])+c\}$$ 假设$j$比$k$更优,则有$$dp[j]+a*(s ...

  7. 模板 可并堆【洛谷P3377】 【模板】左偏树(可并堆)

    P3377 [模板]左偏树(可并堆) 如题,一开始有N个小根堆,每个堆包含且仅包含一个数.接下来需要支持两种操作: 操作1: 1 x y 将第x个数和第y个数所在的小根堆合并(若第x或第y个数已经被删 ...

  8. cocos2d 3.3 安装教程

    最近在学习cocos-2d,百度一下cocos-2d,铺天盖地的都是cocos-2dx的教程,不得不说,老外还是钟情cocos2d,之前安装过cocos2d 2.0版本,网上的教程还是都是0.9的安装 ...

  9. 黑马JavaScript学习一 BOM之Window对象定时器功能

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. php 多语言(UTF-8编码)导出Excel、CSV乱码解决办法之导出UTF-8编码的Excel、CSV

    新项目,大概情况是这样的:可能存在多国.不同语种使用者,比喻有中文.繁体中文,韩文.日本等等,开发时选择了UTF-8编码,开发顺利,没有问题.昨天做了一个csv导出功能,导出的东西完全乱了: 设置mb ...