HDU5386 Cover 果然还是暴力

来源:互联网 发布:软件求职自我介绍 编辑:程序博客网 时间:2024/05/21 06:56

大哭这么简单纯洁的暴力居然比赛的时候没做出来!我也是醉了!

我们只要每次找一行或一列颜色除了0都相同的,然后如果有对应的操作,就把这行这列都赋值成0即可

#include<stdio.h>#include<string.h>#include<math.h>#include<queue>#include<vector>#include<iostream>#include<string>#include<set>#include<map>#include<algorithm>using namespace std;#pragma comment(linker, "/STACK:1024000000,1024000000")#define nn 1000010#define ll long long#define ULL unsiged long long#define mod 258280327#define inf oxfffffffffff#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1////        ((`'-"` `""-'`))////         ) -  -  (////        /  (o _ o)  \////        \  ( 0 )  /////       _'-.._ '=' _..-'_////      /`;#'#'#. -. #'#'#;`\////      \_))   '#'   ((_/////      #.  ☆ ☆ ☆  .#////      '#.  求 A C!  .#'////       /'#.     .#'\////       _\\'#.   .#'//_////       (((___)'#'(___)))//-----------------------------SB-----------------------------------//int a[110][110],b[550],c[550],ans[550];char opt[550];int main(){    int t,m,n;    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++)        {            char ch[2];            scanf("%s%d%d",ch,&b[i],&c[i]);            opt[i]=ch[0];        }        int j;        for(int t=0;t<m;)        {            for(int i=1;i<=m;i++)                if(b[i])                {                    int 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(int 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(int j=1;j<=n;j++)                                a[k][j]=0;                        }                    }                }        }        for(int i=m;i>0;i--)            printf("%d ",ans[i]);        //printf("%d\n",ans[1]);        cout<<endl;    }    return 0;}


0 0
原创粉丝点击