Submission

Status:
---xx

Score: 0

User: dwad

Problemset: ชั้นหนังสือ

Language: c

Time: 0.002 second

Submitted On: 2024-10-08 15:23:58

#include <stdio.h>
#include <string.h>

#define MAX_NBOOK 100
#define MAX_LBOOK 100

int main() {
    int nbook, lbook;
    scanf("%d %d", &lbook, &nbook);

    // Check for valid input
    if (lbook <= 0 || nbook <= 0 || nbook > MAX_NBOOK || lbook > MAX_LBOOK) {
        printf("Invalid input.\n");
        return 1;
    }

    char book[MAX_NBOOK][MAX_LBOOK];
    int cbook[MAX_NBOOK];

    for (int i = 0; i < nbook; i++) { // loop for scan the numbook & name_book
        scanf("%d %s", &cbook[i], book[i]);
    }

    int sumbook = 0;
    for (int i = 0; i < nbook; i++) { // calculate total number of books
        sumbook += cbook[i];
    }

    // Fill book array according to count
    int bookcount = nbook; // Start from nbook
    for (int i = 0; i < nbook; i++) {
        for (int j = 1; j < cbook[i]; j++) {
            strcpy(book[bookcount], book[i]);
            bookcount++;
        }
    }

    // Bubble sort to sort the books
    for (int i = 0; i < sumbook - 1; i++) {
        for (int j = 0; j < sumbook - i - 1; j++) {
            if (strcmp(book[j], book[j + 1]) > 0) {
                char temp[MAX_LBOOK];
                strcpy(temp, book[j]);
                strcpy(book[j], book[j + 1]);
                strcpy(book[j + 1], temp);
            }
        }
    }

    char grid[MAX_LBOOK + 2][2 * sumbook + 1];
    for (int i = 0; i < MAX_LBOOK + 2; i++) {
        for (int j = 0; j < 2 * sumbook + 1; j++) {
            grid[i][j] = '|';
            if ((i == 0 || i == MAX_LBOOK + 1) && j % 2 == 0) {
                grid[i][j] = '+';
            }
            if ((i == 0 || i == MAX_LBOOK + 1) && j % 2 == 1) {
                grid[i][j] = '-';
            }
        }
    }

    for (int i = 0; i < sumbook; i++) {
        if (i % 2 == 0) {
            for (int j = 0; j < strlen(book[i]); j++) {
                if (j + 1 > lbook) break;
                grid[j + 1][2 * i + 1] = book[i][j];
            }
            for (int j = strlen(book[i]); j < lbook; j++) {
                grid[j + 1][2 * i + 1] = '.';
            }
        } else {
            for (int j = 0; j < strlen(book[i]); j++) {
                if (lbook - j < 1) break;
                grid[lbook - j][2 * i + 1] = book[i][j];
            }
            for (int j = strlen(book[i]); j < lbook; j++) {
                grid[lbook - j][2 * i + 1] = '.';
            }
        }
    }

    for (int i = 0; i < MAX_LBOOK + 2; i++) {
        for (int j = 0; j < 2 * sumbook + 1; j++) {
            printf("%c", grid[i][j]);
        }
        printf("\n");
    }
    return 0;
}