题目地址:UVa 120
水题。从最大的开始移,每次都把大的先翻到最上面,再翻到下面。
代码如下:
#include <iostream> #include <cstdio> #include <string> #include <cstring> #include <stdlib.h> #include <math.h> #include <ctype.h> #include <queue> #include <map> #include <set> #include <algorithm> using namespace std; int a[500], b[500], d[500]; int main() { int i, j, flag, cnt, n, x, m; while(scanf("%d",&a[0])!=EOF) { b[a[0]]=0; d[0]=a[0]; i=1; cnt=0; while(getchar()!='\n') { scanf("%d",&a[i]); d[i]=a[i]; b[a[i]]=i; i++; } n=i; m=n; for(i=0; i<n; i++) { printf("%d",a[i]); if(i!=n-1) printf(" "); } printf("\n"); sort(d,d+n); while(n--) { if(b[d[n]]==n) continue ; if(b[d[n]]!=0) { x=b[d[n]]; printf("%d ",m-x); for(i=0; i<=x; i++) { b[a[i]]=x-b[a[i]]; } for(i=0; i<=x/2; i++) { int t=a[i]; a[i]=a[x-i]; a[x-i]=t; } } for(i=0; i<=n; i++) { b[a[i]]=n-b[a[i]]; } for(i=0; i<=n/2; i++) { int t=a[i]; a[i]=a[n-i]; a[n-i]=t; } printf("%d ",m-n); } printf("0\n"); } return 0; }
时间: 2024-12-27 23:09:00