Submission

Status:

PPPxx

Subtask/Task Score:

60/100

Score: 60

User: Whatthepoop

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

Language: c

Time: 0.025 second

Submitted On: 2025-10-11 17:52:00

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

typedef struct {
    int amount;
    char name[100];
} Bookshelf;

void reverse(char str[]) {
    int len = strlen(str);
    int i = 0, j = len - 1;
    while(i < j) {
        char temp = str[i];
        str[i] = str[j];
        str[j] = temp;
        i++;
        j--;
    }
}

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

    Bookshelf s[N];
    for(int i = 0; i < N; i++){
        scanf("%d %s", &s[i].amount, &s[i].name);
    }

    for(int i = 0; i < N-1; i++){
        for(int j = 0; j < N-i-1; j++){
            if(strcmp(s[j].name, s[j+1].name) > 0){
                Bookshelf temp = s[j];
                s[j] = s[j+1];
                s[j+1] = temp;
            }
        }
    }

    char book[100][10000];
    int size = 0;
    for(int i = 0; i < N; i++){
        while(s[i].amount > 0){
            strcpy(book[size], s[i].name);
            size++;
            s[i].amount--;
        }
    }

    for(int i = 0; i < size; i++){
        int len = strlen(book[i]);
        if(len < L){
            char space[L+1];
            space[0] = '\0';
            while(len < L){
                strcat(space, ".");
                len++;
            }
            strcat(book[i], space);
        }
    }

    for(int i = 0; i < size; i++){
        if(i%2 == 1){
            reverse(book[i]);
        }
    }

    for(int i = 0; i < size; i++){
        printf("+-");
    }
    printf("+\n");

    for(int j = 0; j < L; j++){
        for(int i = 0; i < size; i++){
            printf("|%c", book[i][j]);
        }
        printf("|\n");
    }

    for(int i = 0; i < size; i++){
        printf("+-");
    }
    printf("+\n");

    return 0;
}