CF-SDUT-3360-

来源:互联网 发布:top域名能备案吗 编辑:程序博客网 时间:2024/06/07 14:24

题意:

  这道是CF277div2的B题,题意是有种特殊的运算OR,矩阵A做运算得到B,对于每个位置的值,是由i列和j行做‘或’运算得到的结果,现在给你一个B的矩阵,看你能得到一个合适的A矩阵吗? 可以的话,输出YES,

思路:

  对于B中0的那些点,所对应的A矩阵I行和J列,都是0,先把A中那些必然为0的点存上0,对于1的那些点,要去把该行和该列去做运算,

CODE

#include<iostream>#include<string.h>#include<stdlib.h>#include<stdio.h>#include<algorithm>using namespace std;int mp[150][150];struct node{    int x, y;}ls[11000];int main(){    int n, m;    while(~scanf("%d%d",&n,&m))    {        int tp = 0;        memset(mp,-1,sizeof(mp));        int i, j;        for(i = 0; i < n; i++)            for(j = 0; j < m; j++)            {               int u;               scanf("%d",&u);               if(u == 1)              {                  ls[tp].x= i;                  ls[tp++].y = j;              }              else              {                  for(int ii = 0; ii < n; ii++)                    mp[ii][j] = 0;                  for(int jj = 0; jj < m; jj++)                    mp[i][jj] = 0;              }            }       for(i = 0; i < tp; i++)       {           int x = ls[i].x;           int y = ls[i].y;           int ii , jj;           for( ii = 0; ii < n; ii++)             if(mp[ii][y]==-1)              break;           for(jj = 0; jj < m; jj++)            if(mp[x][jj]==-1)             break;           if(ii < n || jj < m)              continue;           else            break;       }       if(i == tp)        printf("YES\n");       else        printf("NO\n");    }    return 0;}


0 0
原创粉丝点击