HDU5386 Cover
1007.Cover
水题,我们只要每次找一行或一列颜色除了00都相同的,然后如果有对应的操作,就把这行这列都赋值成00即可
其实初始矩阵并没有什么卵用
稍微优化下复杂度是O(n^2)O(n2)的,但是为了简易些范围开到了100100
不知道哪里写错了。。一直WR
#include<bits/stdc++.h>
#define N 110
#define M 510
int a[M][M];
char c[M][5];
int x[M],y[M],ans[M];
bool flag[M];
bool used[M][M];
using namespace std;
int main()
{
int T,n,m;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++) scanf("%d",&a[i][j]);
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++) scanf("%d",&a[i][j]);
for (int i=1;i<=m;i++)
{
scanf("%s%d%d",c[i],&x[i],&y[i]);
}
memset(flag,false,sizeof(flag));
memset(used,false,sizeof(used));
for (int k=m;k>=1;k--)
{
for (int j=1;j<=m;j++)
if (!flag[j])
{
bool ok=true;
if (c[j][0]=='H')
{
for (int i=1;i<=n;i++) if (a[x[j]][i]!=y[j]&&!used[x[j]][i]) {ok=false; break;}
}
else
{
for (int i=1;i<=n;i++) if (a[i][x[j]]!=y[j]&&!used[i][x[j]]) {ok=false; break;}
}
if (ok)
{
flag[j]=true;
ans[j]=k;
if (c[j][0]=='H') for (int i=1;i<=n;i++) used[x[j]][i]=true;
else for (int i=1;i<=n;i++) used[i][x[j]]=true;
break;
}
}
}
for (int i=1;i<=m;i++)
if (i==m) printf("%d\n",ans[i]); else printf("%d ",ans[i]);
}
}
/*
2
3 5
2 2 1
2 3 3
2 1 3
1 1 1
2 2 2
3 3 3
L 2 3
H 1 1
L 2 3
H 3 3
H 2 2
3 5
2 2 1
2 3 3
2 1 3
3 3 3
3 3 3
3 3 3
H 2 3
L 2 2
H 3 3
H 1 3
L 2 3
*/
浙公网安备 33010602011771号