Advertisement
Guest User

Untitled

a guest
Nov 18th, 2019
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.45 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement