Fotolog
Volver a la lista de problemas
Stacks of Flapjacks
120.c
/* Stacks of Flapjacks */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int len;
int stack[35];
int sorted[35];
int
compar(const void *a, const void *b) {
int i = *(int *)a;
int j = *(int *)b;
return i-j;
}
void
flip(int num) {
int i;
int t;
for(i=0; i<(len-num+1)/2; i++) {
t = stack[i];
stack[i] = stack[len-num-i];
stack[len-num-i] = t;
}
printf("%d ", num);
}
void
doit(void) {
int i,j;
for(i=len-1; i>=0; i--) {
if (stack[i]==sorted[i]) {
continue;
}
if (stack[0]!=sorted[i]) {
for(j=0; j<i; j++) {
if (stack[j]==sorted[i]) {
flip(len-j);
break;
}
}
}
flip(len-i);
}
printf("0\n");
}
int main(void)
{
char buf[1024];
while(fgets(buf, 1024, stdin)) {
char *s;
printf("%s", buf);
len=0;
s = strtok(buf, " \t\r\n");
while(s) {
if (sscanf(s, "%d", &stack[len++])!=1) {
abort();
}
s = strtok(NULL, " \t\r\n");
}
memcpy(sorted, stack, len*sizeof(int));
qsort(sorted, len, sizeof(int), compar);
doit();
}
exit(0);
}









