hdu5386(暴力)
阿新 • • 發佈:2017-05-07
我們 能夠 else class tro 這一 sin ron cpp
題意:
給出兩個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(暴力)