SHARE
TWEET

Untitled

a guest Nov 18th, 2019 86 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <ctype.h>
  4. void check(void *a) {
  5.     if (a == NULL)
  6.         exit(1);
  7. }
  8. int fill(int x, int y, int n, char **a, char **viz, int *m) {
  9.     int s = 0;
  10.     viz[x][y] = 1;
  11.     int dx[] = {-1, 0, 1, 0};
  12.     int dy[] = {0, 1, 0, -1};
  13.  
  14.     for (int i = 0; i < 4; ++i) {
  15.         int nx = x + dx[i], ny = y + dy[i];
  16.         if (nx >= 0 && nx < n && ny >= 0 && ny < 4 * m[nx] && a[nx][ny] == 0 && viz[nx][ny] == 0)
  17.             s += fill(nx, ny, n, a, viz, m);
  18.     }
  19.     return s + 1;
  20. }
  21. int trans_nr(char ch) {
  22.     if (isdigit((ch))) {
  23.         return ch - '0';
  24.     }
  25.     return ch - 'A' + 10;
  26. }
  27. char to_number(int x) {
  28.     if (x < 128) {
  29.         return x;
  30.     }
  31.     return x - 256;
  32. }
  33.  
  34. int length(char ch) {
  35.     if (ch == 'I') {
  36.         return 4;
  37.     } else if (ch == 'S') {
  38.         return 2;
  39.     }
  40.     return 1;
  41. }
  42. void trans_hx(char x) {
  43.     if (x < 10) {
  44.         printf("%d", x);
  45.     } else {
  46.         printf("%c", x - 10 + 'A');
  47.     }
  48. }
  49. void to_hexa(char x) {
  50.     int cx = x;
  51.     if (x < 0) {
  52.         cx += 256;
  53.     }
  54.     trans_hx(cx / 16);
  55.     trans_hx(cx % 16);
  56. }
  57. int main()
  58. {
  59.     freopen("date.in", "r", stdin);
  60.     int n;
  61.     scanf("%d", &n);
  62.     char **a = (char **)malloc(n * sizeof(char *));
  63.     check(*a);
  64.     int *m = (int*)malloc(n * sizeof(int));
  65.     check(m);
  66.     for (int i = 0; i < n; ++i) {
  67.         scanf("%d ", &m[i]);
  68.         a[i] = (char *)malloc(m[i] * 4 * sizeof(char));
  69.         check(a[i]);
  70.  
  71.         char x, y;
  72.         for (int k = 0; k < m[i]; ++k) {
  73.             for (int j = 4 * k + 3; j >= 4 * k; --j) {
  74.                 scanf("%c%c", &x, &y);
  75.                 a[i][j] = to_number((int) trans_nr(x) * 16 + trans_nr(y));
  76.             }
  77.             scanf(" ");
  78.         }
  79.     }
  80.     int s = 0;
  81.     for (int j = 0; j < 4 * m[0]; ++j) {
  82.         s += a[0][j];
  83.     }
  84.     for (int j = 0; j < 4 * m[n - 1]; ++j) {
  85.         s += a[n - 1][j];
  86.     }
  87.     for (int i = 1; i < n - 1; ++i) {
  88.         s += a[i][0];
  89.         s += a[i][m[i] * 4 - 1];
  90.     }
  91.     printf("task 1:\n%.7lf\n", 1.0 * s / (4 * (m[0] + m[n - 1]) + 2 * (n - 2)));
  92.  
  93.     int q;
  94.     for (scanf("%d\n", &q); q > 0; --q) {
  95.         char op, type;
  96.         int l, c, len;
  97.         scanf("%c %c%d%d ", &op, &type, &l, &c);
  98.         len = length(type);
  99.         c = len * (c - 1);
  100.         if (op == 'M') {
  101.             if (c > 4 * m[l] - 1) {
  102.                 int aux = m[l];
  103.                 m[l] = c / 4 + 1;
  104.                 a[l] = (char *)realloc(a[l], m[l] * 4 * sizeof(char));
  105.                 check(a[l]);
  106.                 for (int j = 4 * aux; j < 4 * m[l]; ++j) {
  107.                     a[l][j] = 0;
  108.                 }
  109.             }
  110.             char ch, x, y;
  111.             for (int i = 1; i <= 4 - len; ++i) {
  112.                 scanf("%c%c", &ch, &ch);
  113.             }
  114.             for (int j = len - 1; j >= 0; --j) {
  115.                 scanf("%c%c", &x, &y);
  116.                 a[l][c + j] = trans_nr(x) * 16 + trans_nr(y);
  117.             }
  118.         } else if (op == 'D') {
  119.             for (int j = 0; j < len; ++j) {
  120.                 a[l][c + j] = 0;
  121.             }
  122.         } else {
  123.             if (len == 1)
  124.                 continue;
  125.             c += len;
  126.             int st = c, dr = c + len - 1;
  127.             while (st <= dr) {
  128.                 int aux = a[l][st];
  129.                 a[l][st] = a[l][dr];
  130.                 a[l][dr] = aux;
  131.                 ++st; --dr;
  132.             }
  133.         }
  134.         scanf("\n");
  135.     }
  136.     printf("task 2\n");
  137.     for (int i = 0; i < n; ++i) {
  138.         for (int k = 0; k < m[i]; ++k) {
  139.             for (int j = 4 * k + 3; j >= 4 * k; --j) {
  140.                 to_hexa(a[i][j]);
  141.             }
  142.             printf(" ");
  143.         }
  144.         printf("\n");
  145.     }
  146.  
  147.     char **viz = (char**)malloc(n * sizeof(char*));
  148.     check(*viz);
  149.     for (int i = 0; i < n; ++i) {
  150.         viz[i] = (char*)calloc(m[i], sizeof(char));
  151.         check(viz[i]);
  152.     }
  153.     int ans = 0, mx = 0, my = 0;
  154.     for (int i = 0; i < n; ++i) {
  155.         for (int j = 0; j < 4 * m[i]; ++j) {
  156.             if(a[i][j] == 0 && viz[i][j] == 0) {
  157.                 int res = fill(i, j, n, a, viz, m);
  158.                 if (res > ans) {
  159.                     ans = res;
  160.                     mx = i;
  161.                     my = j;
  162.                 }
  163.             }
  164.         }
  165.     }
  166.     printf("task 3\n%d %d %d\n", mx, my, ans);
  167.     for (int i = 0; i < n; ++i) {
  168.         free(a[i]);
  169.         free(viz[i]);
  170.     }
  171.     free(m);
  172.     return 0;
  173. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top