我的代码能通过样例、我自已编的输入和uDebug网站上的输入,但提交了就WA,我找了很久都没找到原因。
#include <iostream>
#include <cstdio>
#include <memory.h>
#include <algorithm>
using namespace std;
int flapjack[35],temp[35],pos[105],n;
bool isend=false;
void read()
{
char c;
int i=1,t;
scanf("%d",flapjack+i);
pos[flapjack[i]]=i;
temp[i]=flapjack[i];
i++;
while((c=getchar())!='\n'&&c!=EOF)
{
scanf("%d",flapjack+i);
pos[flapjack[i]]=i;
temp[i]=flapjack[i];
i++;
}
n=i-1;
// for(int j=1;j<i;j++)
// {
// printf("%d ",flapjack[j]);
// }
if(c==EOF)
{
printf("aaa");
isend=true;
}
}
void solve(int x,int n,bool flag)//一共n张饼,最下面x张已排好 ,flag没用,但我懒得盖
{
if(x==n)//已排好了
{
printf("0\n");
return;
}
int max=temp[n-x+1];//因为最先读入的是最上面的饼,所以要用n-x+1反一下
if(flapjack[n-x+1]!=max)
{
if(pos[max]!=1)//若不在最上面,则先把它翻上来
{
printf("%d ",n-pos[max]+1);
for(int i=pos[max],j=1;i>=j;i--,j++)
{
swap(pos[flapjack[i]],pos[flapjack[j]]);
swap(flapjack[i],flapjack[j]);
}
}
printf("%d ",x);
for(int i=n-x+1,j=1;i>=j;i--,j++)
{
swap(pos[flapjack[i]],pos[flapjack[j]]);
swap(flapjack[i],flapjack[j]);
}
}
solve(x+1,n,flag);
}
int main()
{
while(!isend)
{
read();
sort(temp+1,temp+n+1);
// reverse(flapjack+1,flapjack+n+1);
// for(int j=1;j<=n;j++)
// printf("%d ",temp[j]);
solve(1,n,false);
}
//read();
return 0;
}