本文主要是介绍HDU 5386 暴力,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
给出初始矩阵和目标矩阵,存在m中操作,可以分别把每行或者每列都涂成同一种颜色,数据保证有解
因为保证有解,所以初始矩阵完全没有用。。。
暴力寻找M次操作,若目标矩阵的行或列全和该操作的颜色一样,则最后进行此操作,并把所有涂的点涂为颜色0(可当任意颜色)
然后同样依次推出之前的操作,因为之后的操作会覆盖掉之前操作的点。
#include "stdio.h"
#include "string.h"
struct Mark
{int x,y;char op;
}mark[510];
int a[110][110],ans[510];
int main()
{int t,n,m,i,cnt,j,k;char str[2];scanf("%d",&t);while (t--){scanf("%d%d",&n,&m);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++){scanf("%s%d%d",str,&mark[i].x,&mark[i].y);mark[i].op=str[0];}cnt=m;while (cnt!=0){for (i=1;i<=m;i++)if (mark[i].x!=0){k=mark[i].x;if (mark[i].op=='H'){for (j=1;j<=n;j++)if (a[k][j]!=0 && a[k][j]!=mark[i].y) break;if (j==n+1){for (j=1;j<=n;j++)a[k][j]=0;mark[i].x=0;ans[cnt--]=i;}}else{for (j=1;j<=n;j++)if (a[j][k]!=0 && a[j][k]!=mark[i].y) break;if (j==n+1){for (j=1;j<=n;j++)a[j][k]=0;mark[i].x=0;ans[cnt--]=i;}}}}for (i=1;i<=m;i++)printf("%d ",ans[i]);printf("\n");}return 0;
}
这篇关于HDU 5386 暴力的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!