首页 > 代码库 > hdu5386(暴力)
hdu5386(暴力)
题意:
给出两个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"); } }
hdu5386(暴力)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。