https://code.google.com/codejam/contest/4304486/dashboard#s=p0&a=2
This problem is very simple, use basic linked operation will be enough,
it only compare the head item and tail item.
if new item > head item, then new item will be inserted into head.
if new item <= head item, then it will be inserted int tail. check following code.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | #include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> struct element { char c; struct element *next; }; int main(int argc,char **argv) { int N; char c; scanf("%d\n",&N); char array[2000]; for(int i=0;i<N;i++) { memset(array,0,sizeof(char)*2000); scanf("%s\n",array); struct element *tail; struct element *head = (struct element *)malloc(sizeof(struct element)); memset(head,0,sizeof(struct element)); head->c = array[0]; head->next = NULL; tail = head; for(int j=1;array[j]!='\0';j++) { if(array[j]>=head->c) { struct element *e = (struct element *)malloc(sizeof(struct element)); e->c = array[j]; e->next = head; head = e; } else { struct element *e = (struct element *)malloc(sizeof(struct element)); e->c = array[j]; e->next = NULL; tail->next = e; tail = e; } } printf("Case #%d: ",i+1); struct element *p = head; for(;;) { if(p!=NULL){ printf("%c",p->c); p=p->next; } else break; } printf("\n"); } return 0; } |