Submission

Status:

P----

Subtask/Task Score:

20/100

Score: 20

User: angpangSK

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

Language: c

Time: 1.121 second

Submitted On: 2025-09-23 19:17:14

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

#define MAX_L 30
#define MAX_N 2000
#define MAX_K 10
#define MAX_BOOKS (MAX_N * MAX_K)

char books[MAX_BOOKS][MAX_L + 1];
char grid[MAX_L][MAX_BOOKS];

void sort_books(int n) {
    for (int i = 0; i < n - 1; i++) {
        for (int j = i + 1; j < n; j++) {
            if (strcmp(books[i], books[j]) > 0) {
                char tmp[MAX_L + 1];
                strcpy(tmp, books[i]);
                strcpy(books[i], books[j]);
                strcpy(books[j], tmp);
            }
        }
    }
}

int main() {
    int L, N;
    scanf("%d %d", &L, &N);

    int total = 0;
    for (int i = 0; i < N; i++) {
        int K;
        char S[MAX_L + 1];
        scanf("%d %s", &K, S);
        for (int k = 0; k < K; k++) {
            strcpy(books[total++], S);
        }
    }

    sort_books(total);

    for (int r = 0; r < L; r++) {
        for (int c = 0; c < total; c++) {
            grid[r][c] = ' ';
        }
    }

    for (int col = 0; col < total; col++) {
        int len = strlen(books[col]);
        if (col % 2 == 0) {
            for (int i = 0; i < len && i < L; i++) {
                grid[i][col] = books[col][i];
            }
        } else {
            for (int i = 0; i < len && i < L; i++) {
                grid[L - 1 - i][col] = books[col][i];
            }
        }
    }

    printf("+");
    for (int i = 0; i < total; i++) printf("-+");
    printf("\n");

    for (int r = 0; r < L; r++) {
        printf("|");
        for (int c = 0; c < total; c++) {
            printf("%c|", grid[r][c]);
        }
        printf("\n");
    }

    printf("+");
    for (int i = 0; i < total; i++) printf("-+");
    printf("\n");

    return 0;
}