忙着考试,很久没做UVa。现在放假了,放假该好好刷题了。


#include<cstdio>
#include<cstring>
#include<algorithm>

#define MAXN 20480

using namespace std;

int cnt_p = 0, cnt_n = 0, max_part = 0;
int part_n[MAXN], max_len[MAXN];
char t[MAXN], part[MAXN][MAXN];

int part_num(int k) {
    int sum = 0;
    for(int i = 0; i < k; i++)
        sum += part_n[i];
    return sum;
}

void search_max_len() {
    int n = 0;
    for(int i = 0; i < cnt_n; i++) {
        for(int j = 0; j < part_n[i]; j++) {
            int k = part_num(i);
            int len = strlen(part[k + j]);
            max_len[j] = max(max_len[j], len + 1);
        }
    }
    return ;
}

void get_mes() {
    while(gets(t) != NULL) {
        int cnt_c = 0;
        for(int i = 0; i < strlen(t); i++) {
            if(t[i] != ' ')
                part[cnt_p][cnt_c++] = t[i];
            else if(strlen(part[cnt_p])) {
                cnt_p++;
                cnt_c = 0;
                part_n[cnt_n]++;
            }
        }
        if(t[strlen(t) - 1] != ' ') {
            part_n[cnt_n]++;
            cnt_p++;
        }
        max_part = max(part_n[cnt_n], max_part);
        cnt_n++;
        memset(t, 0, sizeof(t));
    }
    search_max_len();
    return ;
}

void put_part() {
    for(int i = 0; i < cnt_n; i++) {
        for(int j = 0; j < part_n[i]; j++) {
            int k = part_num(i);
            printf("%s", part[k + j]);
            if(j != part_n[i] - 1)
                for(int p = 0; p < max_len[j] - strlen(part[k + j]); p++)
                    printf(" ");
        }
        printf("\n");
    }
    return ;
}

int main() {
    get_mes();
    put_part();
    return 0;
}