// @BEGIN_OF_SOURCE_CODE /* @JUDGE_ID: 17243NT 120 C++ "Modified Selection Sort" */ // Send to judge@uva.es #include #include #ifdef ONLINE_JUDGE #define ins cin #define outs cout #else #define ins fin #define outs fout ifstream fin("myprog.in"); ofstream fout("myprog.out"); #endif int n; int stack[35]; int sorted[35]; void sortstack(); void flip(int k); void pancake(int v); int main() { int i; char c; while(ins >> c) { ins.putback(c); n = 0; for(;;) { for(;;) { ins.get(c); if(c == '\n' || (c >= '0' && c <= '9')) break; } if(c == '\n') break; ins.putback(c); ins >> stack[n++]; } cout << stack[0]; for(i = 1; i < n; i++) cout << ' ' << stack[i]; cout << endl; sortstack(); pancake(n - 1); } return 0; } void pancake(int v) { int i; if(v < 0) { cout << "0\n"; return; } if(sorted[v] == stack[v]) { pancake(v - 1); return; } if(sorted[v] != stack[0]) { for(i = 0; i < v; i++) { if(sorted[v] == stack[i]) { cout << n - i << " "; flip(n - i); break; } } } cout << n - v << " "; flip(n - v); pancake(v - 1); } void flip(int k) { int i = 0; int j = n - k; int t; while(i < j) { t = stack[i]; stack[i] = stack[j]; stack[j] = t; i++; j--; } } void sortstack() { int i, j, min; for(i = 0; i < n; i++) sorted[i] = stack[i]; for(i = 0; i < n - 1; i++) { min = i; for(j = i + 1; j < n; j++) { if(sorted[j] < sorted[min]) min = j; } j = sorted[i]; sorted[i] = sorted[min]; sorted[min] = j; } } // @END_OF_SOURCE_CODE