> 文档中心 > C++ 鼎纹

C++ 鼎纹


📋 个人简介

🎉大家好,我是3月份新人榜排名第三的 ༺金龙༒凤凰༻
💬支持我:点赞👍+收藏⭐️+留言📝
🌺格言:༺永做优质༒programmer༻

🔥问题描述

🌐据说鼎纹的⼀种制造⽅式是⽤铜模印出来的,这是我国古代劳动⼈⺠智慧的结晶。

🌐铜模印过的地⽅,会留下深深的印记,经过时间的炼化,洗练成历史的遗存。

🌐聪明的古代劳动⼈⺠拥有⼀个 a ⾏ b 列的铜模,每个位置要么是 0(代表这个点是平的),要么是 1(代表这个点是凸起的)。他们想造⼀个 n ⾏ m 列的鼎⾯,其中每个位置也都是 0 或1,表示经过若⼲次印后,每个位置的结果。

🌐有⼀些要求。铜模是不能旋转和翻转的;在印的过程当中,铜模的凸起不能出现在鼎⾯的外⾯(平的部分是可以出现在外⾯的),鼎⾯上的同⼀个位置不能被多个凸起印下(在任意两次印时,鼎⾯上不存在⼀个点,使得这两次都有铜模上为 1 的点覆盖它)。

🌐请你判断这个鼎⾯能不能被印出来。

🔥输⼊格式

🔮本题多测。

🔮第⼀⾏,⼀个整数 T,表示测试点数量。

🔮接下来 T 个测试点,每个测试点中:

🔮第⼀⾏包含 4 个整数 n,m,a,b。

🔮接下来 n ⾏,每⾏ m 个字符,描述鼎⾯。“0”表示平,“1”表示凸起。

🔮接下来 a ⾏,每⾏ b 个字符,描述铜模。“0”表示平,“1”表示凸起。

🔥输出格式

⚜️⼀共有 T ⾏,对于每个测试点,输出⼀⾏“YES”(能)或“NO”(不能)。

🔥样例输入

23 4 4 2110001101100100110002 2 2 211110110

🔥样例输出

YESNO

🔥数据规模与约定

🍋对于 70% 的数据n,m,a,b≤50

🍋对于 100% 的数据1≤T≤10,1≤n,m,a,b≤1000

💯CODE

#includeusing namespace std;struct kk{    int x,y;}k[100010];char tar[1010][1010];int n,m,a,b,t,s,tx,ty,sx,sy;char g;int main(){    cin >> t;    while(t--){ int flg=1,cnt=0,ff=1; cin >> n >> m >> a >> b; for(int i = 0;i < n;i++)     for(int j = 0;j < m;j++)  tar[i][j ]= 0; for(int i = 1;i <= a;i++)     for(int j = 1;j <= b;j++)  tar[i][j] = 0; for(int i = 0;i > tar[i];;   for(int i = 1;i <= a;i++)     for(int j = 1;j <= b;j++){  scanf(" %1d",&s);  if(s){      if(ff == 1){   k[++cnt].x = 0;   k[cnt].y = 0;   sx = i;   sy = j;   ff = 0;      }      else{   k[++cnt].x = i-sx;   k[cnt].y = j-sy;   }  }     }     for(int i = 0;i < n;i++){     if(flg == 0)break;     for(int j = 0;j < m;j++){  if(flg == 0)break;  if(tar[i][j] == '1'){      if(ff == 1){   flg = 0;   break;      }      for(int p = 1;p = 0 && ty >= 0 && tx < n && ty < m && (e == '1')){tar[tx][ty] = '0';   }   else{flg = 0;break;   }      }  }     } }      if(flg)cout << "YES" << endl;elsecout << "NO" << endl;    }    return 0;}

🌌朋友们,点赞是我更新的动力,明天再见,拜拜!!!