2013年11月13日 星期三

[UVA] 120 - Stacks of Flapjacks


#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include <sstream>
using namespace std;
int s[500],a[500],w[500];
char in[10000];
int main(){
    int n,i,j,x,y,ed,flag;
    string line;
    while(getline(cin, line)){
        stringstream sin(line);
        n=0;
        while(sin >> s[n])
            a[n]=s[n],n++;
        printf("%d",s[0]);
        for(i=1;i<n;i++)
            printf(" %d",s[i]);
        puts("");
        sort(a,a+n);
        ed=n-1;
        while(ed>=0){
            if(s[ed]==a[ed]){
                ed--;
                continue;
            }
            for(i=0;i<n;i++)
                if(s[i]==a[ed]){
                    x=i;
                    break;
                }
            if(x!=0 && x!=ed){
                printf("%d ",n-x);
                memcpy(w,s,sizeof(s));
                for(i=0;i<=x;i++){
                    s[i]=w[x-i];
                }
            }
            flag=1;
            for(i=0;i<n;i++)
                if(s[i]!=a[i])
                    flag=0;
            if(flag) break;
            if(x!=ed){
                printf("%d ",n-ed);
                memcpy(w,s,sizeof(s));
                for(i=0;i<=ed;i++){
                    s[i]=w[ed-i];
                }
            }
            flag=1;
            for(i=0;i<n;i++)
                if(s[i]!=a[i])
                    flag=0;
            if(flag) break;
            ed--;
        }
        puts("0");
        memset(in,0,sizeof(in));
        memset(s,0,sizeof(s));
        memset(a,0,sizeof(a));
    }
}

沒有留言:

張貼留言