hdu5386(暴力)
2024-09-04 16:37:57
题意:
给出两个n*n的矩阵,一个作为初始矩阵。一个作为目标矩阵,给出m个操作,操作有两种,一种是“L,x,y”。代表我们要把x这一行赋成y,还有一种是“H,x,y”,代表要把x这一列赋成y。问我们怎样安排这些操作才干把初始矩阵转化成目标矩阵。输出方案。special judge
思路:
首先明白一点,初始矩阵是没实用的~,依照题解的说法。我们能够按顺序枚举全部操作,假设是L操作,我们就在目标矩阵中找一行都是y的。把这一行都更成0,同一时候把答案更新,如此往复,直至我们得到一种方案。
附上题解代码(绍兴一中的):
#include <stdio.h>
#include <stdlib.h>
using namespace std; int T,n,m,t,i,j,k,l;
int a[105][105],b[505],c[505],ans[505];
char opt[505],ch; int main()
{
scanf("%d",&T);
for(;T;--T)
{
scanf("%d%d",&n,&m);t=0;
for(i=1;i<=n;++i)
for(j=1;j<=n;++j)
scanf("%d",&a[i][j]);
for(i=1;i<=n;++i)
for(j=1;j<=n;++j)
scanf("%d",&a[i][j]);
for(i=1;i<=m;++i)
{
for(ch=getchar();ch!='H'&&ch!='L';ch=getchar());
opt[i]=ch;scanf("%d%d",&b[i],&c[i]);
}
for(;t<m;)
{
for(i=1;i<=m;++i)
if(b[i])
{
k=b[i];
if(opt[i]=='L')
{
for(j=1;j<=n;++j)
if(a[j][k]&&a[j][k]!=c[i])
break;
if(j>n)
{
ans[++t]=i;b[i]=0;
for(j=1;j<=n;++j)a[j][k]=0;
}
}
else
{
for(j=1;j<=n;++j)
if(a[k][j]&&a[k][j]!=c[i])
break;
if(j>n)
{
ans[++t]=i;b[i]=0;
for(j=1;j<=n;++j)a[k][j]=0;
}
}
}
}
for(i=m;i>=1;--i)printf("%d ",ans[i]);
printf("\n");
}
}
最新文章
- Android性能优化之App应用启动分析与优化
- WINDOWS登录系统之前(欢迎界面)运行指定程序脚本服务
- input 正则限制输入内容
- Hibernate学习笔记(二)
- c# foreach循环二维数组
- 一款符合当前主流审美的Swing外观(Look and Feel)_测试版发布
- JS匿名函数自执行函数
- MySQL主从读写分离专题
- 修改Oracle 10g Express Edition默认的8080端口
- 转:精心挑选的12款优秀 jQuery Ajax 分页插件和教程
- mouseover和this的巧用
- Redis数据类型之List(三)
- 可以用 Python 编程语言做哪些神奇好玩的事情?
- 多线程(5)async&;await
- Google代码规范
- iOS 数组问题
- 全网最详细的最新稳定OSSEC搭建部署(ossec-server(CentOS7.X)和ossec-agent(CentOS7.X))(图文详解)
- 如何在Mac上搭建自己的服务器——Nginx
- spring cloud 下载依赖慢解决方案
- 1.SpringMVC入门