码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 5386 Cover (MUT #8 模拟暴力)

时间:2015-08-14 17:11:48      阅读:91      评论:0      收藏:0      [点我收藏+]

标签:多校联合

【题目链接】:click here~~

【题意】:

操作L x y,把当前x,这一列全部置为y 
操作H x y,把当前,这一行全部置为y。 
现在给你n?n的初始矩阵,以及n?n的目标矩阵 
现在给你m种操作(由以上两种操作构成),问怎么排序这m种操作,才能使得,初始矩阵,经由排序后的操作,构成目标矩阵。 
输出排序方案。

也就是给出初始矩阵和目标矩阵,存在m中操作,可以分别把每行或者每列都涂成同一种颜色,数据保证有解,因为保证有解,(然而初始矩阵并没有什么卵用。。。)
【思路】:

暴力寻找M次操作,若目标矩阵的行或列全和该操作的颜色一样,则最后进行此操作,并把所有涂的点涂为颜色0(可当任意颜色)
然后同样依次推出之前的操作,因为之后的操作会覆盖掉之前操作的点。

PS:比赛当时居然又忽略了,
代码:

#include<bits/stdc++.h>
using namespace std;
const int N=505;
int goal[N][N];
int n,m;
inline int read(){
    int c=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){c=c*10+ch-'0';ch=getchar();}
    return c*f;
}
struct node{
    char op;
    int x,y;
} mat[N];
char s[2];
int ans[N];
int main(){
    int i,j,t;
    t=read();
    while(t--){
        memset(goal,0,sizeof(goal));
        memset(ans,0,sizeof(ans));
        int cnt,num;
        n=read();m=read();
        for( i=1; i<=n; ++i)
            for(j=1; j<=n; ++j)goal[i][j]=read();
        for(i=1; i<=n; ++i)
            for(j=1; j<=n; ++j)goal[i][j]=read();
        for(i=1; i<=m; ++i){
            scanf("%s %d %d",s,&mat[i].x,&mat[i].y);
            mat[i].op=s[0];
        }
        cnt=m;
        int c1,c2,fH=0,fL=0;
        while(cnt!=0){
            for(i=1; i<=m; ++i){
                if(mat[i].x!=0){
                      c1=mat[i].x;
                      c2=mat[i].y;
                    if(mat[i].op=='H'){
                        for(j=1; j<=n; j++)
                            if(goal[c1][j]!=0&&goal[c1][j]!=c2) break;
                        if(j==n+1){
                            for(int k=1; k<=n; k++)
                                goal[c1][k]=0;
                                 ans[cnt--]=i;
                                 mat[i].x=0;
                        }
                    }
                    else{
                        for(j=1; j<=n; j++)
                            if(goal[j][c1]!=0&&goal[j][c1]!=c2) break;
                        if(j==n+1){
                            for(int k=1; k<=n; k++)
                                goal[k][c1]=0;
                                ans[cnt--]=i;
                               mat[i].x=0;
                        }
                    }
                }
            }
        }
         for(i=1; i<=m; i++)
            printf("%d ",ans[i]);
         puts("");
    }
    return 0;
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

HDU 5386 Cover (MUT #8 模拟暴力)

标签:多校联合

原文地址:http://blog.csdn.net/u013050857/article/details/47663229

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!