Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Blagoja Mladenov
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- int min(int a, int b) {
- if(a < b) {
- return a;
- }
- return b;
- }
- int main() {
- char *c;
- int i;
- int j;
- c = (char*) malloc(3 * sizeof(char));
- int **mat;
- mat = (int **)malloc(2000 * sizeof(int *));
- for(i = 0; i < 2000; i++) {
- *(mat + i) = (int*) malloc(2000 * sizeof(int));
- }
- int *sz = (int*)malloc(2000 * sizeof(int));
- for(i = 0; i < 2000; i++) {
- *(sz + i) = 0;
- }
- int r = 0;
- while(1) {
- scanf("%s", c);
- if(strcmp(c, "END") == 0) {
- break;
- }
- if(strcmp(c, "AFR") == 0) {
- int n;
- scanf("%d", &n);
- int *tmp = (int*) malloc(n * sizeof(int));
- for(i = 0; i < n; i++) {
- scanf("%d", (tmp + i));
- }
- int **new = (int**)malloc((r + 1) * sizeof(int*));
- for(i = 0; i < r; i++) {
- *(new + i + 1) = (int*)malloc((*(sz + i)) * sizeof(int));
- for(j = 0; j < *(sz + i); j++) {
- *(*(new + i + 1) + j) = *(*(mat + i) + j);
- }
- }
- *(new) = (int*)malloc(n * sizeof(int));
- for(i = 0; i < n; i++) {
- *(*(new + 0) + i) = *(tmp + i);
- }
- for(i = r; i >= 0; i--) {
- *(sz + i) = *(sz + i - 1);
- }
- *sz = n;
- r++;
- for(i = 0; i < r; i++) {
- for(j = 0; j < *(sz + i); j++) {
- *(*(mat + i) + j) = *(*(new + i) + j);
- }
- }
- free(tmp);
- for(i = 0; i < r; i++) {
- free(*(new + i));
- }
- free(new);
- }
- else if(strcmp(c, "ALR") == 0) {
- int n;
- scanf("%d", &n);
- for(i = 0; i < n; i++) {
- scanf("%d", (*(mat + r) + i));
- }
- *(sz + r) = n;
- r++;
- }
- else if(strcmp(c, "DFR") == 0) {
- if(r > 0) {
- for(i = 0; i < r - 1; i++) {
- *(sz + i) = *(sz + i + 1);
- for(j = 0; j < *(sz + i); j++) {
- *(*(mat + i) + j) = *(*(mat + i + 1) + j);
- }
- }
- r--;
- *(sz + r) = 0;
- }
- }
- else if(strcmp(c, "DLR") == 0) {
- if(r > 0) {
- r--;
- *(sz + r) = 0;
- }
- }
- else if(strcmp(c, "PRT") == 0) {
- printf("%d\n", r);
- for(i = 0; i < r; i++) {
- printf("%d ", *(sz + i));
- for(j = 0; j < *(sz + i); j++) {
- printf("%d ", *(*(mat + i) + j));
- }
- printf("\n");
- }
- }
- else if(strcmp(c, "AFC") == 0) {
- int n;
- scanf("%d", &n);
- for(i = 0; i < r; i++) {
- for(j = *(sz + i); j > 0; j--) {
- *(*(mat + i) + j) = *(*(mat + i) + j - 1);
- }
- *(sz + i) += 1;
- }
- for(i = 0; i < min(n, r); i++) {
- scanf("%d", *(mat + i));
- }
- if(n > r) {
- for(i = r; i < n; i++) {
- *(sz + i) = 1;
- scanf("%d", *(mat + i));
- }
- r = n;
- }
- }
- else if(strcmp(c, "ALC") == 0) {
- int n;
- scanf("%d", &n);
- for(i = 0; i < min(r, n); i++) {
- scanf("%d", (*(mat + i) + *(sz + i)));
- *(sz + i) += 1;
- }
- if(n > r) {
- for(i = r; i < n; i++) {
- *(sz + i) = 1;
- scanf("%d", *(mat + i));
- }
- r = n;
- }
- }
- else if(strcmp(c, "DFC") == 0) {
- if(r == 0) continue;
- int **new = (int**)malloc(2000 * sizeof(int*));
- for(i = 0; i < 2000; i++) {
- *(new + i) = (int*)malloc(2000 * sizeof(int));
- }
- int newsz = 0, *tmp = (int*)malloc(r * sizeof(int));
- for(i = 0; i < r; i++) {
- for(j = 1; j < *(sz + i); j++) {
- *(*(new + i) + j - 1) = *(*(mat + i) + j);
- }
- if(*(sz + i) > 1) {
- *(tmp + newsz) = *(sz + i) - 1;
- newsz++;
- }
- }
- r = newsz;
- for(i = 0; i < r; i++) {
- *(sz + i) = *(tmp + i);
- }
- for(i = 0; i < r; i++) {
- for(j = 0; j < *(sz + i); j++) {
- *(*(mat + i) + j) = *(*(new + i) + j);
- }
- }
- free(tmp);
- for(i = 0; i < 2000; i++) {
- free(*(new + i));
- }
- free(new);
- }
- else if(strcmp(c, "DLC") == 0) {
- if(r == 0) continue;
- int **new = (int**)malloc(2000 * sizeof(int*));
- for(i = 0; i < 2000; i++) {
- *(new + i) = (int*)malloc(2000 * sizeof(int));
- }
- int newsz = 0, *tmp = (int*)malloc(r * sizeof(int));
- for(i = 0; i < r; i++) {
- for(j = 0; j < *(sz + i) - 1; j++) {
- *(*(new + i) + j) = *(*(mat + i) + j);
- }
- if(*(sz + i) > 1) {
- *(tmp + newsz) = *(sz + i) - 1;
- newsz++;
- }
- }
- r = newsz;
- for(i = 0; i < r; i++) {
- *(sz + i) = *(tmp + i);
- }
- for(i = 0; i < r; i++) {
- for(j = 0; j < *(sz + i); j++) {
- *(*(mat + i) + j) = *(*(new + i) + j);
- }
- }
- free(tmp);
- for(i = 0; i < 2000; i++) {
- free(*(new + i));
- }
- free(new);
- }
- else if(strcmp(c, "RMR") == 0) {
- int ind;
- scanf("%d", &ind);
- if(r == 0) continue;
- if(ind >= 0 && ind < r) {
- for(i = ind; i + 1 < r; i++) {
- *(sz + i) = *(sz + i + 1);
- for(j = 0; j < *(sz + i); j++) {
- *(*(mat + i) + j) = *(*(mat + i + 1) + j);
- }
- }
- r--;
- }
- }
- else if(strcmp(c, "RMC") == 0) {
- int ind;
- scanf("%d", &ind);
- if(r == 0) continue;
- int newsz = 0, *tmp = (int*)malloc(r * sizeof(int));
- int **new = (int**)malloc(2000 * sizeof(int*));
- for(i = 0; i < 2000; i++) {
- *(new + i) = (int*)malloc(2000 * sizeof(int));
- }
- for(i = 0; i < r; i++) {
- int ok = 0;
- for(j = 0; j < *(sz + i); j++) {
- if(j == ind) {
- ok = 1;
- continue;
- }
- *(*(new + i) + j) = *(*(mat + i) + j);
- }
- if(ok == 1) {
- if(*(sz + i) > 1) {
- *(tmp + newsz) = *(sz + i) - 1;
- newsz++;
- }
- }
- else {
- *(tmp + newsz) = *(sz + i);
- newsz++;
- }
- }
- r = newsz;
- for(i = 0; i < r; i++) {
- *(sz + i) = *(tmp + i);
- }
- for(i = 0; i < r; i++) {
- for(j = 0; j < *(sz + i); j++) {
- *(*(mat + i) + j) = *(*(new + i) + j);
- }
- }
- free(tmp);
- for(i = 0; i < 2000; i++) {
- free(*(new + i));
- }
- free(new);
- }
- }
- free(c);
- free(sz);
- for(i = 0; i < 2000; i++) {
- free(*(mat + i));
- }
- free(mat);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement