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;}