8-1 Stacks of Flapjacks UVA120

题意:  有一叠煎饼在锅里 n n<=30张  每张都有一个数字 代表它的大小    厨师每次可以选择一个数k  把从锅底开始数第k张上面的煎饼全部反过来  即原来的在上面的煎饼现在到了下面    如

Sample Input

1 2 3 4 5

5 4 3 2 1

5 1 2 3 4

Sample Output

1 2 3 4 5

0

5 4 3 2 1

1 0

5 1 2 3 4

1 2 0

按照选择排序模拟

各种加一减一模拟的好乱  糟糕的代码

#include<bits/stdc++.h>
using namespace std;
#define  N 30
int a[N];
int path[N];
int n,c;

void chang(int x)
{
    int temp[N];
    for(int i=1;i<=n-x+1;i++)
           temp[i]=a[n-x-i+2];
    for(int i=n-x+2;i<=n;i++)
        temp[i]=a[i];
    memcpy(a,temp,sizeof a);
}

void dfs(int cur)
{
    if(cur==1)
    {
       for(int i=0;i<c;i++)
          printf("%d ",path[i]);
          printf("0\n");
          return ;
    }
    int maxx=0;
    int u=0;
    for(int i=1;i<=cur;i++)
        {
            if(a[i]>maxx){maxx=a[i],u=i;   }
        }
    if(u!=cur)
    {
          if(u!=1)
            chang(n-u+1);path[c++]=n-u+1;
            chang(n-cur+1);path[c++]=n-cur+1;
    }
    dfs(cur-1);
}

int main()
{
   char s[1000];
   while(fgets(s,1000,stdin))
   {
       int cnt=1;
       int v=0;
       int i=0;
       while(i<strlen(s))
       {
           while(!isspace(s[i])&&i<strlen(s))v=v*10+s[i++]-'0';
           a[cnt++]=v;
           v=0;
           i++;
       }

     n=cnt-1;
     for(int i=1;i<=n;i++)
     {

         printf("%d",a[i]);
         if(i!=cnt)printf(" ");
     }
     printf("\n");
     c=0;
     dfs(n);
   }
}

数据读入用流来写很快!!!   还有找最大值下标函数!! 交换的话直接一个循环 加swap函数  不用temp   

我写了70行  lrj大大写了30行 

菜鸡还需努力。。。

#include<bits/stdc++.h>
using namespace std;
const int maxn = 30 + 5;
int n, a[maxn];

// 翻转a[0..p]
void flip(int p) {
  for(int i = 0; i < p-i; i++)
    swap(a[i], a[p-i]);
  printf("%d ", n-p);
}

int main() {
  string s;
  while(getline(cin, s)) {
    cout << s << "\n";
    stringstream ss(s);
    n = 0;
    while(ss >> a[n]) n++;
    for(int i = n-1; i > 0; i--) {
      int p = max_element(a, a+i+1) - a; // 元素a[0..i]中的最大元素
      if(p == i) continue;
      if(p > 0) flip(p); // flip(0)没啥意思,是不?
      flip(i);
    }
    printf("0\n");
  }
  return 0;
}

猜你喜欢

转载自www.cnblogs.com/bxd123/p/10426407.html