题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5386

题目大意:给一个初始矩阵(n×n)、一个目标矩阵(n×n)和m个操作,要求找到一种操作顺序,使初始矩阵变成目标矩阵。操作共有两种,如下:

  L x y: 把当前矩阵第x列的数全变为y
  H x y: 把当前矩阵第x行的数全变为y

输入格式:先输入case数T,每个case第一行是两个整数n和m,接下来n行输入初始矩阵,再下来n行输入目标矩阵。最后m行输入操作。
  1≤color[i][j]≤n,color[i][j]为数组元素。
  T=5
  1≤n≤100
  1≤m≤500

分析:根据数据范围推解题方法,此题对数组元素的大小做了限制,可以从这点下手。

  统计目标矩阵中每个数出现的次数,对列亦是。若有个操作是L x y,而目标矩阵第x列的值全是y,那显然,这个操作最后一次做是合情合理的,去掉这一列后,又是一个新问题,可以找到新的可以“最后一步”做的操作。依次类推,每次找一个合法的操作,逆序输出即可。

参考代码:

主体代码是队友写的,写的够简洁的~

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
struct node{
int t,x,y;
}b[];
int c[][][],a[][],mark[],ans[],ans2[];
char s[];
bool vis[][];
int main(){
int t,n,m;
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&m);
for(int i=;i<n;i++)
for(int j=;j<n;j++)
scanf("%d",&a[i][j]);
memset(c,,sizeof(c));
memset(mark,,sizeof(mark));
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
{
scanf("%d",&a[i][j]);
c[][j][a[i][j]]++;
c[][i][a[i][j]]++;
}
int cnt=,d[];
d[]=n;
d[]=n;
for(int i=;i<m;i++){
scanf("%s%d%d",&s,&b[i].x,&b[i].y);
if(s[]=='L') b[i].t=;
else b[i].t=;
}
memset(vis, , sizeof(vis));
for(int j=;j<m;j++)
for(int i=;i<m;i++)
if(!mark[i]){
if(d[b[i].t]==c[b[i].t][b[i].x][b[i].y])
{
if(vis[b[i].t][b[i].x]) continue;
vis[b[i].t][b[i].x] = ;
mark[i]=;
ans[m-cnt-]=i+;
cnt++;
d[b[i].t^]--;
for(int k=;k<=n;k++){
if(vis[b[i].t^][k]) continue;
if(b[i].t) c[b[i].t^][k][a[b[i].x][k]]--;
else c[b[i].t^][k][a[k][b[i].x]]--;
}
}
}
int flag=;
for(int i=;i<m;i++)
if(!mark[i]){
ans[m-cnt-]=i+;
cnt++;
}
for(int i=;i<m;i++){
if(flag==) printf(" ");
flag=;
printf("%d",ans[i]);
}
puts("");
}
}

最新文章

  1. sqlserver 对字符串的SUM
  2. [USACO1.1]坏掉的项链Broken Necklace
  3. 取消GridView/ListView item被点击时的效果 记录学习
  4. 一些iOS心得
  5. 《JavaScript Ninja》之闭包
  6. plsql如果表和函数等显示不出来
  7. Harris角点算法
  8. C++静态库与动态库(简介)
  9. ODBC操作excel
  10. 获得正在编辑行的数据 esayui datagrid
  11. node请求下载接口时乱码
  12. Mysql 时间差(年、月、天、时、分、秒)
  13. vue computed、methods、watch的区别
  14. 使用IDEA导出可运行的jar包,包含引用第三方jar包
  15. hdu2328 Corporate Identity【string库使用】【暴力】【KMP】
  16. 小任务tasklet应用
  17. solr dismax与edismax的参数列表
  18. 503 Service Unavailable
  19. P2774 方格取数问题
  20. phpcms模板

热门文章

  1. Microsoft windows terminal
  2. React-Native 之 GD (十)Android启动页面 及 模态方式跳转
  3. C# 调Win32 API SendMessage简单用法及wMsg常量
  4. 三十二、python操作XML文件
  5. 一个包含n个结点的四叉树,每一个节点都有4个指向孩子节点的指针,这4n个指针有(3*n+1)个空指针. 4*n-(n-1) = 3*n+1
  6. pycharm中git配置(coding.net为例)
  7. day47—JavaScript事件基础应用
  8. 使用fiddler,提示系统找不到相应的文件FSE2.exe文件
  9. 好的计数思想-LightOj 1213 - Fantasy of a Summation
  10. Monte Carlo Control