题意:
给出两个n*n的矩阵,一个作为初始矩阵。一个作为目标矩阵,给出m个操作,操作有两种,一种是“L,x,y”。代表我们要把x这一行赋成y,还有一种是“H,x,y”,代表要把x这一列赋成y。问我们怎样安排这些操作才干把初始矩阵转化成目标矩阵。输出方案。special judge
思路:
首先明白一点,初始矩阵是没实用的~,依照题解的说法。我们能够按顺序枚举全部操作,假设是L操作,我们就在目标矩阵中找一行都是y的。把这一行都更成0,同一时候把答案更新,如此往复,直至我们得到一种方案。
附上题解代码(绍兴一中的):
#include#include 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 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"); }}