Submission #1298992

#TimeUsernameProblemLanguageResultExecution timeMemory
1298992NotLinuxGardening (RMI21_gardening)C++20
100 / 100
68 ms2580 KiB
#include <bits/stdc++.h>
using namespace std;
#define sz(x) (int)x.size()
#define all(x) x.begin() , x.end()
void solve(){
	int n,m,k;
    cin >> n >> m >> k;
    if(n%2 or m%2 or n*m < 4*k or k < max(n,m) / 2){
    	cout << "NO" << endl;
    	return;
    }
    vector<vector<int>>grid(n,vector<int>(m,-1));
    vector<pair<int,int>>rectangle;
    // kac tane kaplama olcak
    int kap = 0 , curk = n*m/4;
    for(int i = 1;i<=min(n,m)/2;i++){
    	int hi = (n-2*i) * (m-2*i) / 4 + i;
    	if(k > hi){
    		kap = i-1;
    		break;
    	}
    	else{
    		rectangle.push_back({n-2*(i-1) , m-2*(i-1)});
    		curk = hi;
    	}
	}
	int sayac = 1;
	// fuck this case
	if(k == curk-1){
		if(kap == 0){
			cout << "NO" << endl;
			return;	
		}
		else{
			rectangle.pop_back();
			kap--;
			curk = (n-2*kap) * (m-2*kap) / 4 + kap;
			
			if(n-2*kap >= 6 and m-2*kap >= 8){
				// cout << "FLAG 1" << endl;
				rectangle.push_back({n-2*kap,m-2*kap - 4});
				for(int x = kap;x<=kap+5;x++){
					grid[x][m-kap-4] = sayac;
					grid[x][m-kap-1] = sayac;
				}
				for(int y = m-kap-4;y<=m-kap-1;y++){
					grid[kap][y] = sayac;
					grid[kap+5][y] = sayac;
				}
				sayac++;
			}
			else if(n-2*kap >= 8 and m-2*kap >= 6){
				// cout << "FLAG 2" << endl;
				rectangle.push_back({n-2*kap - 4,m-2*kap});
				for(int y = kap;y<=kap+5;y++){
					grid[n-kap-4][y] = sayac;
					grid[n-kap-1][y] = sayac;
				}
				for(int x = n-kap-4;x<=n-kap-1;x++){
					grid[x][kap] = sayac;
					grid[x][kap+5] = sayac;
				}
				sayac++;
			}
			else{
				cout << "NO" << endl;
				return;
			}
		}
	}
	else{
		if(k != curk){
			int x=4,y=4;
			curk -= 2;
			for(int xi = 6;xi <= n-2*kap;xi+=2){
				if(k == curk)break;
				else{
					x = xi;
					curk--;
				}
			}
			// rectangle y boyu ne olacak
			for(int yi = 6;yi <= m-2*kap;yi+=2){
				if(k == curk)break;
				else{
					y = yi;
					curk--;
				}
			}
			rectangle.push_back({x,y});
		}
	}
	// rectanglelari koy
	for(int ind = 0;ind<sz(rectangle);ind++){
		auto r = rectangle[ind];
		for(int x = ind;x < ind + r.first;x++){
			grid[x][ind] = sayac;
			grid[x][ind + r.second - 1] = sayac;
		}
		for(int y = ind;y < ind + r.second;y++){
			grid[ind][y] = sayac;
			grid[ind + r.first - 1][y] = sayac;
		}
		sayac++;
	}
	// bosluk doldur
	for(int i = 0;i<n-1;i++){
		for(int j = 0;j<m-1;j++){
			if(grid[i][j] == -1 and grid[i+1][j] == -1 and grid[i][j+1] == -1 and grid[i+1][j+1] == -1){
				grid[i][j] = grid[i+1][j] = grid[i][j+1] = grid[i+1][j+1] = sayac;
				sayac++;
			}
		}
	}
	// yazdir
	cout << "YES" << endl;
	for(int i = 0;i<n;i++){
		for(int j = 0;j<m;j++){
			cout << grid[i][j] << " ";
		}
		cout << endl;
	}
}
signed main(){
	ios_base::sync_with_stdio(0);cin.tie(0);
	int testcase=1;cin >> testcase;
	while(testcase--)solve();
	cerr << 1000.0 * clock() / CLOCKS_PER_SEC << " ms" << endl;
}
#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...