13269 : 쌓기나무

풀이

앞에서 보이는 최대 값들로 채워준 다음

옆에서 보이는 최대 값들을 만족하게 바꿔준다

그리고 조건을 만족하는지 체크해보자!

코드

#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

wookje.kwon's profile image

wookje.kwon

2017-09-27 13:08

Read more posts by this author