依次找最大的烙饼,并翻滚放入适当位置,每个烙饼最多2次即可放好。直接模拟就好了。
思想有了,用代码实现还要想好久。。
#include <stdio.h>
#include <string.h>
#include <algorithm>
int a[35], b[35], c[35];
int main()
{
// freopen("in", "r", stdin);
char data[1000];
int n;
while(gets(data))
{
puts(data);
char *p = strtok(data, " ");
n = 0;
while(p)
{
sscanf(p, "%d", &a[++n]);
b[n] = a[n];
p = strtok(NULL, " ");
}
std::sort(b + 1, b + n + 1);
for(int i = n; i; i--)
{
for(int j = 1; j <= i; j++)
{
if(b[i] == a[j] && i != j)
{
if(j == 1) printf("%d ", n - i + 1);
else printf("%d %d ", n - j + 1, n - i + 1);
int v = 0;
for(int k = i; k > j; k--) c[++v] = a[k];
for(int k = 1; k <= j; k++) c[++v] = a[k];
for(int k = i + 1; k <= n; k++) c[++v] = a[k];
for(int k = 1; k <= v; k++) a[k] = c[k];
break;
}
}
}
printf("0\n");
}
return 0;
}