Submission

Status:

P----

Subtask/Task Score:

20/100

Score: 20

User: angpangSK

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

Language: cpp

Time: 0.025 second

Submitted On: 2025-09-23 19:26:36

#include <stdio.h>
#include <string.h>
#include <stdlib.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];

int cmp(const void *a, const void *b) {
    return strcmp((const char *)a, (const char *)b);
}

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);
    }

    qsort(books, total, sizeof(books[0]), cmp);

    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[i][col] = books[col][len - 1 - 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;
}