풀이
앞에서 보이는 최대 값들로 채워준 다음
옆에서 보이는 최대 값들을 만족하게 바꿔준다
그리고 조건을 만족하는지 체크해보자!
코드
#include <stdio.h>
#define REP(k,n) for(k=0;k<n;k++)
#define RRP(k,n) for(k=n-1;k>=0;k--)
int main() {
int n, m, i, j, a[500][500], b[500], c[500];
scanf("%d %d", &n, &m);
REP(i,n) REP(j,m) scanf("%d", &a[i][j]);
REP(j,m) {
scanf("%d", &b[j]);
REP(i,n) if (a[i][j] == 1) a[i][j] = b[j];
}
RRP(i,n) {
scanf("%d", &c[i]);
REP(j,m) if (a[i][j] > c[i]) a[i][j] = c[i];
}
REP(j,m) {
bool f1 = 0, f2 = 0;
REP(i,n) {
if (a[i][j] > b[j]) f1 = 1;
if (a[i][j] == b[j]) f2 = 1;
}
if (f1 || !f2) {
printf("-1");
return 0;
}
}
RRP(i,n) {
bool f1 = 0, f2 = 0;
REP(j,m) {
if (a[i][j] > c[i]) f1 = 1;
if (a[i][j] == c[i]) f2 = 1;
}
if (f1 || !f2) {
printf("-1");
return 0;
}
}
REP(i,n) {
REP(j,m) printf("%d ", a[i][j]);
puts("");
}
return 0;
}
아무말
백준, 백준 온라인 저지, BOJ, Baekjoon Online Judge