Advertisement
Infiniti_Inter

page 79 problem 20

Mar 19th, 2019
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.98 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5.  
  6. #define Line cout << endl << "-------------------------------------------\n\n"
  7. #define forn(i, n) for(int i = 0; i < int(n);i++)
  8. const int INF = 1e9 + 13;
  9. const int N = 1e5 + 13;
  10.  
  11. bool comparator(int a, int b, string s){
  12.     return (s == "Greater") ? a < b : a > b;
  13. }
  14. template<typename T> void My_sort(T* arr, int n, string rule){
  15.    for(int i = 0; i < n; i++)
  16.         for(int j = i; j > 0 && comparator(arr[j - 1], arr[j], rule); j--)
  17.             swap(arr[j - 1], arr[j]);
  18. }
  19. template<typename T> T* Get_Line(T** a, int k, int n){
  20.     int SIZE, i, j, ptr = 0;
  21.     if (k < n){
  22.         SIZE = k + 1;
  23.         i = n - k - 1;
  24.         j = 0;
  25.     }
  26.     else{
  27.         SIZE = 2 * n - 1 - k;
  28.         i = 0;
  29.         j = k - n + 1;
  30.     }
  31.     T* res = new T[SIZE];
  32.     while(i < n && j < n)
  33.         res[ptr++] = a[i++][j++];
  34.     return res;
  35. }
  36. template<typename T> void Replace(T** a, const T* arr, int k, int n){
  37.     int i, j, ptr = 0;
  38.     if (k < n){
  39.         i = n - k - 1;
  40.         j = 0;
  41.     }
  42.     else{
  43.         i = 0;
  44.         j = k - n + 1;
  45.     }
  46.     while(i < n && j < n)
  47.         a[i++][j++] = arr[ptr++];
  48. }
  49. template<typename T> void print_a(T** a, int n){
  50.     Line;
  51.     forn(i, n){
  52.         forn(j, n)
  53.             cout << a[i][j] << ' ';
  54.         cout << '\n';
  55.     }
  56. }
  57. template<typename T> T** init(int n){
  58.     T** a = new int*[n];
  59.     forn(i, n)
  60.         a[i] = new int[n];
  61.     forn(i, n)
  62.         forn(j, n)
  63.             cin >> a[i][j];
  64.     return a;
  65. }
  66. int main(){
  67.     int n;
  68.     cin >> n;
  69.     int** a = init(n);
  70.     forn(k, n * 2 - 1){
  71.         string RULE;
  72.         int SIZE;
  73.         if (k < n)
  74.             RULE = "Little";
  75.         else
  76.             RULE = "Greater";
  77.         if (k < n)
  78.             SIZE = k + 1;
  79.         else
  80.             SIZE = 2*n - k - 1;
  81.  
  82.         int* temp = Get_Line(a, k, n);
  83.         My_sort(temp, SIZE, RULE);
  84.         Replace(a, temp, k, n);
  85.         delete [] temp;
  86.     }
  87.     print_a(a, n);
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement