Back to list of problems
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); }