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(1000 * sizeof(int *));
- for(i = 0; i < 1000 ; i++) {
- *(mat + i) = (int*) malloc(1000 * sizeof(int));
- }
- int *sz = (int*)malloc(1000 * sizeof(int));
- for(i = 0; i < 1000; 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));
- }
- for(i = r; i > 0; i--) {
- *(sz + i) = *(sz + i - 1);
- for(j = 0; j < *(sz + i); j++) {
- *(*(mat + i) + j) = *(*(mat + i - 1) + j);
- }
- }
- r++;
- *(sz) = n;
- for(i =0 ; i < n; i++) {
- *(*(mat) + i) = *(tmp + i);
- }
- }
- 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);
- int *a = (int*)malloc(n * sizeof(int));
- for(i = 0; i < n; i++) {
- scanf("%d", (a + i));
- }
- for(i = 0; i < n; i++) {
- if(*(sz + i) > 0) {
- for(j = *(sz + i); j > 0; j--) {
- *(*(mat + i) + j) = *(*(mat + i) + j - 1);
- }
- *(*(mat + i)) = *(a + i);
- *(sz + i) += 1;
- }
- else {
- *(sz + i) = 1;
- *(*(mat + i)) = *(a + i);
- r++;
- }
- }
- free(a);
- }
- else if(strcmp(c, "ALC") == 0) {
- int n;
- scanf("%d", &n);
- int *a = (int*)malloc(n * sizeof(int));
- for(i = 0; i < n; i++) {
- scanf("%d", (a + i));
- }
- for(i = 0; i < n; i++) {
- if(*(sz + i) > 0) {
- *(*(mat + i) + (*(sz + i))) = *(a + i);
- *(sz + i) += 1;
- }
- else {
- *(sz + i) = 1;
- *(*(mat + i)) = *(a + i);
- r++;
- }
- }
- free(a);
- }
- else if(strcmp(c, "DFC") == 0) {
- if(r == 0) continue;
- for(i = 0; i < r; i++) {
- *(sz + i) -= 1;
- }
- for(i = 0; i < r; i++) {
- for(j = 0; j < *(sz + i); j++) {
- *(*(mat + i) + j) = *(*(mat + i) + j + 1);
- }
- }
- int at = 0;
- for(i = 0; i < r; i++) {
- if(*(sz + i) > 0) {
- for(j = 0; j < *(sz + i); j++) {
- *(*(mat + at) + j) = *(*(mat + i) + j);
- }
- *(sz + at) = *(sz + i);
- at++;
- }
- }
- r = at;
- }
- else if(strcmp(c, "DLC") == 0) {
- if(r == 0) continue;
- for(i = 0; i < r; i++) {
- *(sz + i) -= 1;
- }
- int at = 0;
- for(i = 0; i < r; i++) {
- if(*(sz + i) > 0) {
- for(j = 0; j < *(sz + i); j++) {
- *(*(mat + at) + j) = *(*(mat + i) + j);
- }
- *(sz + at) = *(sz + i);
- at++;
- }
- }
- r = at;
- }
- else if(strcmp(c, "IBR") == 0) {
- int ind, n;
- scanf("%d%d", &ind, &n);
- int *a = (int*)malloc(n * sizeof(int));
- for(i = 0; i < n; i++) {
- scanf("%d", (a + i));
- }
- if(ind >= 0 && ind < r) {
- for(i = r; i > ind; i--) {
- *(sz + i) = *(sz + i - 1);
- for(j = 0; j < *(sz + i); j++) {
- *(*(mat + i) + j) = *(*(mat + i - 1) + j);
- }
- }
- *(sz + ind) = n;
- for(j = 0; j < n; j++) {
- *(*(mat + ind) + j) = *(a + j);
- }
- r++;
- }
- free(a);
- }
- else if(strcmp(c, "IAR") == 0) {
- int ind, n;
- scanf("%d%d", &ind, &n);
- int *a = (int*)malloc(n * sizeof(int));
- for(i = 0; i < n; i++) {
- scanf("%d", (a + i));
- }
- if(ind >= 0 && ind < r) {
- for(i = r; i > ind + 1; i--) {
- *(sz + i) = *(sz + i - 1);
- for(j = 0; j < *(sz + i); j++) {
- *(*(mat + i) + j) = *(*(mat + i - 1) + j);
- }
- }
- *(sz + ind + 1) = n;
- for(j = 0; j < n; j++) {
- *(*(mat + ind + 1) + j) = *(a + j);
- }
- r++;
- }
- free(a);
- }
- else if(strcmp(c, "RMR") == 0) {
- int ind;
- scanf("%d", &ind);
- if(ind >= 0 && ind < r) {
- for(i = ind; i < r - 1; i++) {
- *(sz + i) = *(sz + i + 1);
- for(j = 0; j < *(sz + i); j++) {
- *(*(mat + i) + j) = *(*(mat + i + 1) + j);
- }
- }
- *(sz + r - 1) = 0;
- r--;
- }
- }
- else if(strcmp(c, "RMC") == 0) {
- int ind;
- scanf("%d", &ind);
- for(i = 0; i < r; i++) {
- if(ind >= 0 && ind < (*(sz + i))) {
- for(j = ind; j + 1 < *(sz + i); j++) {
- *(*(mat + i) + j) = *(*(mat + i) + j + 1);
- }
- *(sz + i) -= 1;
- }
- }
- int at = 0;
- for(i = 0; i < r; i++) {
- if(*(sz + i) > 0) {
- for(j = 0; j < *(sz + i); j++) {
- *(*(mat + at) + j) = *(*(mat + i) + j);
- }
- *(sz + at) = *(sz + i);
- at++;
- }
- }
- r = at;
- }
- else if(strcmp(c, "SWR") == 0) {
- int ind1, ind2;
- scanf("%d%d", &ind1, &ind2);
- if(ind1 >= 0 && ind2 >= 0 && ind1 < r && ind2 < r) {
- int *a1 = (int*) malloc(*(sz + ind1) * sizeof(int));
- int *a2 = (int*)malloc(*(sz + ind2) * sizeof(int));
- for(i = 0; i < *(sz + ind1); i++) {
- *(a1 + i) = *(*(mat + ind1) + i);
- }
- for(i = 0; i < *(sz + ind2); i++) {
- *(a2 + i) = *(*(mat + ind2) + i);
- }
- int sz1 = *(sz + ind1);
- int sz2 = *(sz + ind2);
- *(sz + ind1) = sz2;
- *(sz + ind2) = sz1;
- for(i = 0; i < *(sz + ind1); i++) {
- *(*(mat + ind1) + i) = *(a2 + i);
- }
- for(i = 0; i < *(sz + ind2); i++) {
- *(*(mat + ind2) + i) = *(a1 + i);
- }
- free(a1);
- free(a2);
- }
- }
- else if(strcmp(c, "SWC") == 0) {
- int ind1, ind2;
- scanf("%d%d", &ind1, &ind2);
- for(i = 0; i < r; i++) {
- int val1 = -1, val2 = -1;
- for(j = 0; j < *(sz + i); j++) {
- if(ind1 == j) {
- val1 = *(*(mat + i) + j);
- }
- if(ind2 == j) {
- val2 = *(*(mat + i) + j);
- }
- }
- if(val1 != -1 && val2 != -1) {
- *(*(mat + i) + ind1) = val2;
- *(*(mat + i) + ind2) = val1;
- }
- }
- }
- else if(strcmp(c, "RMB") == 0) {
- int i1, j1;
- int s1, s2;
- scanf("%d%d%d%d", &i1, &s1, &j1, &s2);
- int *a = (int*)malloc(1000 * sizeof(int));
- for(i = i1; i < i1 + s1; i++) {
- int at = 0;
- for(j = 0; j < *(sz + i); j++) {
- if(j < j1 || j >= j1 + s2) {
- *(a + at) = *(*(mat + i) + j);
- at++;
- }
- }
- *(sz + i) = at;
- for(j = 0; j < *(sz + i); j++) {
- *(*(mat + i) + j) = *(a + j);
- }
- }
- int at = 0;
- for(i = 0; i < r; i++) {
- if(*(sz + i) > 0) {
- for(j = 0; j < *(sz + i); j++) {
- *(*(mat + at) + j) = *(*(mat + i) + j);
- }
- *(sz + at) = *(sz + i);
- at++;
- }
- }
- r = at;
- free(a);
- }
- else if(strcmp(c, "IBC") == 0) {
- int ind, n;
- scanf("%d%d", &ind, &n);
- int *a = (int*)malloc(n * sizeof(int));
- for(i = 0; i < n; i++) {
- scanf("%d", (a + i));
- }
- for(i = 0; i < n; i++) {
- if(*(sz + i) > 0) {
- if(ind < *(sz + i)) {
- for(j = *(sz + i); j > ind; j--) {
- *(*(mat + i) + j) = *(*(mat + i) + j - 1);
- }
- *(*(mat + i) + ind)= *(a + i);
- *(sz + i) += 1;
- }
- else {
- *(*(mat + i) + (*(sz + i))) = *(a + i);
- *(sz + i) += 1;
- }
- }
- else {
- *(sz + i) = 1;
- *(*(mat + i)) = *(a + i);
- r++;
- }
- }
- free(a);
- }
- else if(strcmp(c, "IAC") == 0) {
- int ind, n;
- scanf("%d%d", &ind, &n);
- int *a = (int*)malloc(n * sizeof(int));
- for(i = 0; i < n; i++) {
- scanf("%d", (a + i));
- }
- for(i = 0; i < n; i++) {
- if(*(sz + i) > 0) {
- if(ind < *(sz + i)) {
- for(j = *(sz + i); j > ind + 1; j--) {
- *(*(mat + i) + j) = *(*(mat + i) + j - 1);
- }
- *(*(mat + i) + ind + 1)= *(a + i);
- *(sz + i) += 1;
- }
- else {
- *(*(mat + i) + (*(sz + i))) = *(a + i);
- *(sz + i) += 1;
- }
- }
- else {
- *(sz + i) = 1;
- *(*(mat + i)) = *(a + i);
- r++;
- }
- }
- free(a);
- }
- else if(strcmp(c, "ISB") == 0) {
- int i1, j1;
- scanf("%d%d", &i1, &j1);
- int n, m;
- scanf("%d%d", &n, &m);
- int **a = (int**) malloc((n + 1) * sizeof(int*));
- for(i = 0; i < n; i++) {
- *(a + i) = (int*)malloc((m + 1) * sizeof(int));
- }
- for(i = 0; i < n; i++) {
- for(j = 0; j < m; j++) {
- scanf("%d", (*(a + i) + j));
- }
- }
- int x = 0;
- int q = r;
- if(r >= i1) {
- q = i1;
- }
- for(i = i1; i < i1 + n; i++) {
- if(*(sz + i) == 0) {
- for(j = 0; j < m; j++) {
- *(*(mat + q) + j) = *(*(a + x) + j);
- }
- *(sz + q) = m;
- r++;
- }
- else if(*(sz + q) <= j1) {
- for(j = 0; j < m; j++) {
- *(*(mat + q) + (*(sz + q))) = *(*(a + x) + j);
- *(sz + q) += 1;
- }
- }
- else {
- int newsz = 0;
- int *tmp = (int*)malloc(1500 * sizeof(int));
- for(j = j1; j < *(sz + q); j++) {
- *(tmp + newsz) = *(*(mat + q) + j);
- newsz++;
- }
- *(sz + q) += m;
- newsz = 0;
- for(j = j1 + m; j < *(sz + q); j++) {
- *(*(mat + q) + j) = *(tmp + newsz);
- newsz++;
- }
- free(tmp);
- for(j = j1; j < j1 + m; j++) {
- *(*(mat + q) + j) = *(*(a + x) + j - j1);
- }
- }
- x++;
- q++;
- }
- int at = 0;
- for(i = 0; i < 1000; i++) {
- if(*(sz + i) > 0) {
- for(j = 0; j < *(sz + i); j++) {
- *(*(mat + at) + j) = *(*(mat + i) + j);
- }
- *(sz + at) = *(sz + i);
- at++;
- }
- }
- r = at;
- for(i = 0; i < n; i++) {
- free(*(a + i));
- }
- free(a);
- }
- else if(strcmp(c, "WRF") == 0) {
- char *f = (char*)malloc(300 * sizeof(char));
- scanf("%s", f);
- FILE *file = fopen(f, "wb");
- char *str = (char*)malloc(1000 * sizeof(char));
- int at = 0;
- int rr = r;
- while(rr > 0) {
- *(str + at) = (rr % 10) + '0';
- rr /= 10;
- at++;
- }
- for(i = at - 1; i >= 0; i--) {
- fprintf(file, "%c", *(str + i));
- }
- fprintf(file, "\n");
- for(i = 0; i < r; i++) {
- unsigned int pp = *(sz + i);
- fprintf(file, "%c", ((pp >> 8) & 256));
- fprintf(file, "%c ", ((pp & 256)));
- for(j = 0; j < *(sz + i); j++) {
- int bb = *(*(mat + i) + j);
- fprintf(file, "%c ", ((bb >> 24) & 256));
- fprintf(file, "%c ", ((bb >> 16) & 256));
- fprintf(file, "%c ", ((bb >> 8) & 256));
- fprintf(file, "%c ", ((bb) & 256));
- }
- fprintf(file, "\n");
- }
- free(f);
- free(str);
- fclose(file);
- }
- else if(strcmp(c, "RDF") == 0) {
- char *f = (char*)malloc(300 * sizeof(char));
- scanf("%s", f);
- FILE *file = fopen(f, "rb");
- mat = (int **)malloc(1000 * sizeof(int *));
- for(i = 0; i < 1000 ; i++) {
- *(mat + i) = (int*) malloc(1000 * sizeof(int));
- *(sz + i) = 0;
- }
- r = 0;
- char t;
- while(1) {
- t = getc(file);
- if(t < '0' || t > '9') break;
- r = (r * 10) + (t - '0');
- }
- for(i =0 ; i < r; i++) {
- t = fgetc(file);
- int ff = (int) t;
- *(sz + i) = ((ff >> 8) );
- t = fgetc(file);
- ff = (int)t;
- *(sz + i) |= (ff );
- for(j = 0; j < *(sz + i); j++) {
- t = fgetc(file);
- ff = (int) t;
- *(*(mat + i) + j) = 0;
- *(*(mat + i) + j) = ((ff >> 24 ));
- t = fgetc(file);
- ff = (int) t;
- *(*(mat + i) + j) |= ((ff >> 16));
- t = fgetc(file);
- ff = (int) t;
- *(*(mat + i) + j) |= ((ff >> 8));
- t = fgetc(file);
- ff = (int) t;
- *(*(mat + i) + j) |= ((ff));
- }
- }
- free(f);
- fclose(file);
- // free(f);
- }
- }
- free(c);
- free(sz);
- for(i = 0; i < 1000; i++) {
- free(*(mat + i));
- }
- free(mat);
- return 0;
- }
- /*
- ALR 1 1
- ALR 1 1
- ALR 1 1
- ALR 1 1
- ALR 1 1
- ALR 1 1
- ALR 1 1
- ALR 1 1
- ALR 1 1
- ALR 1 1
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement