fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define int long long
  4. #define siz(x) (int)(x.size())
  5.  
  6. int n, m, k;
  7.  
  8. int32_t main(){
  9. ios_base::sync_with_stdio(0);
  10. cin.tie(0);
  11.  
  12. int test = 1;
  13. cin >> test;
  14. while(test--){
  15. cin >> n >> m >> k;
  16. vector<vector<int>> a;
  17. // Sử dụng 1-index; hàng từ 0 đến n (n+1 hàng) và cột từ 0 đến m (m+1 cột)
  18. a.assign(n+1, vector<int>());
  19. int num = n*m / k;
  20. for(int i = 0; i <= n; i++){
  21. a[i].assign(m+1, 0);
  22. }
  23.  
  24. int dem = 0;
  25. for(int i = 1; i <= n; i++){
  26. for(int j = 1; j <= m; j++){
  27. if(a[i][j] == 0){
  28. int cur_i = i, cur_j = j;
  29. set<int> s;
  30. while(cur_i <= n && cur_j <= m){
  31. int curVal = dem / num + 1;
  32. s.insert(curVal);
  33. // Nếu trong chuỗi đã có >1 giá trị thì dừng chuỗi
  34. if(siz(s) >= 2) break;
  35. // Kiểm tra các ô kề bên nhưng đảm bảo truy cập trong giới hạn
  36. if(cur_j - 1 >= 1 && a[cur_i][cur_j - 1] == curVal) break;
  37. if(cur_i - 1 >= 1 && a[cur_i - 1][cur_j] == curVal) break;
  38. if(cur_i + 1 <= n && a[cur_i + 1][cur_j] == curVal) break;
  39. if(cur_j + 1 <= m && a[cur_i][cur_j + 1] == curVal) break;
  40.  
  41. a[cur_i][cur_j] = curVal;
  42. dem++;
  43.  
  44. // Di chuyển theo đường chéo xuống dưới
  45. if(cur_i + 1 <= n && cur_j + 1 <= m)
  46. cur_i++, cur_j++;
  47. else
  48. cur_j += 2;
  49. }
  50. }
  51. }
  52. }
  53.  
  54. for(int i = 1; i <= n; i++){
  55. for(int j = 1; j <= m; j++){
  56. cout << a[i][j] << " ";
  57. }
  58. cout << "\n";
  59. }
  60. }
  61. return 0;
  62. }
  63.  
Success #stdin #stdout 0s 5288KB
stdin
1
3 3 3
stdout
1 2 0 
2 1 2 
3 0 3