忙着考试,很久没做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; }