Submission #742606

#TimeUsernameProblemLanguageResultExecution timeMemory
742606siewjhGardening (RMI21_gardening)C++17
100 / 100
18 ms852 KiB
#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> ans;
int c;
bool ok(int rows, int cols, int grps){
	int mxg = rows * cols / 4, mng = max(rows / 2, cols / 2);
	return !(rows & 1 || cols & 1 || grps < mng || grps > mxg || grps == mxg - 1 || (rows == cols && grps == mng + 1));
}
void solve(int rows, int cols, int grps, int rind, int cind){
	if (rows == 2){
		for (int k = 0; k < cols; k += 2){
			c++;
			for (int i = 0; i < 2; i++)
				for (int j = 0; j < 2; j++)
					ans[rind + i][cind + k + j] = c;
		}
	}
	else if (cols == 2){
		for (int k = 0; k < rows; k += 2){
			c++;
			for (int i = 0; i < 2; i++)
				for (int j = 0; j < 2; j++)
					ans[rind + k + i][cind + j] = c;
		}
	}
	else if (ok(rows - 2, cols - 2, grps - 1)){
		c++;
		for (int i = 0; i < rows; i++) ans[rind + i][cind] = ans[rind + i][cind + cols - 1] = c;
		for (int i = 0; i < cols; i++) ans[rind][cind + i] = ans[rind + rows - 1][cind + i] = c;
		solve(rows - 2, cols - 2, grps - 1, rind + 1, cind + 1);
	}
	else if (ok(rows, cols - 2, grps - rows / 2)){
		for (int k = 0; k < rows; k += 2){
			c++;
			for (int i = 0; i < 2; i++)
				for (int j = 0; j < 2; j++)
					ans[rind + k + i][cind + j] = c;
		}
		solve(rows, cols - 2, grps - rows / 2, rind, cind + 2);
	}
	else{
		for (int k = 0; k < cols; k += 2){
			c++;
			for (int i = 0; i < 2; i++)
				for (int j = 0; j < 2; j++)
					ans[rind + i][cind + k + j] = c;
		}
		solve(rows - 2, cols, grps - cols / 2, rind + 2, cind);
	}
}
int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);
	int cases; cin >> cases;
	while (cases--){
		int rows, cols, grps; cin >> rows >> cols >> grps;
		if (!ok(rows, cols, grps)){
			cout << "NO\n";
			continue;
		}
		ans = vector<vector<int>>(rows, vector<int>(cols));
		c = 0;
		solve(rows, cols, grps, 0, 0);
		cout << "YES\n";
		for (int i = 0; i < rows; i++){
			for (int j = 0; j < cols; j++) cout << ans[i][j] << ' ';
			cout << '\n';
		}
	}
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...