HDU 5386 Cover
2024-09-05 19:10:47
题目链接: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("");
}
}
最新文章
- sqlserver 对字符串的SUM
- [USACO1.1]坏掉的项链Broken Necklace
- 取消GridView/ListView item被点击时的效果 记录学习
- 一些iOS心得
- 《JavaScript Ninja》之闭包
- plsql如果表和函数等显示不出来
- Harris角点算法
- C++静态库与动态库(简介)
- ODBC操作excel
- 获得正在编辑行的数据 esayui datagrid
- node请求下载接口时乱码
- Mysql 时间差(年、月、天、时、分、秒)
- vue computed、methods、watch的区别
- 使用IDEA导出可运行的jar包,包含引用第三方jar包
- hdu2328 Corporate Identity【string库使用】【暴力】【KMP】
- 小任务tasklet应用
- solr dismax与edismax的参数列表
- 503 Service Unavailable
- P2774 方格取数问题
- phpcms模板
热门文章
- Microsoft windows terminal
- React-Native 之 GD (十)Android启动页面 及 模态方式跳转
- C# 调Win32 API SendMessage简单用法及wMsg常量
- 三十二、python操作XML文件
- 一个包含n个结点的四叉树,每一个节点都有4个指向孩子节点的指针,这4n个指针有(3*n+1)个空指针. 4*n-(n-1) = 3*n+1
- pycharm中git配置(coding.net为例)
- day47—JavaScript事件基础应用
- 使用fiddler,提示系统找不到相应的文件FSE2.exe文件
- 好的计数思想-LightOj 1213 - Fantasy of a Summation
- Monte Carlo Control