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