language: Haskell (ghc-6.8.2)
date: 116 days 22 hours ago
link:
visibility: public
1
2
3
4
5
6
7
import System.IO
 
quicksort []     = []
quicksort (x:xs) = quicksort [y | y <- xs, y < x] ++ [x] ++ quicksort [y | y <- xs, y >= x]
 
main = print . quicksort =<< getLine
 
  • upload with new input
  • result: Success     time: 0.01s    memory: 3600 kB     returned value: 0

    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    
    #ifndef bool
    #define bool int
    #endif
    
    #ifndef true
    #define true 1
    #endif
    
    #ifndef false
    #define false 0
    #endif
    
    struct state
    {
    int value;//最小時間を記憶
    bool infinity_p;//無限大の時間を記憶
    bool solved_p;/*状態としてそこに至る最小時間を計算できるかどうかを持つ
                    できていればtrue そうでなければfalse*/
    bool oldK_p;//自分の前の状態が i==k であったか
    bool oldJ_p;//自分の前の状態が i==j であったか
    };
    
    struct states
    {
    struct state *stateArray;
    int *x,*r,n;
    };
    
    void initialize(struct states *ss);
    void inputData(struct states *ss);
    void printState(struct states *ss);
     void print1State(struct states *ss,int j,int k,int i);
     void print1StateBefore(struct states *ss,int j,int k,int i);
     struct state *getStateArrayPtr(struct states *ss,int j,int k,int ijk_p);
    void turn(struct states *ss,int k);
     void turn0(struct states *ss,int j,int k);
     void turn1(struct states *ss,int j,int k);
    void printSolution(struct states *ss);
    void finalize(struct states *ss);
    
    int main(int argc,char *argv[])
    {
    struct states ss;
    int k;
    initialize(&ss);//配列の初期化
    inputData(&ss);//配列の用意とx,rの値の入力
    printState(&ss);//表出力
    //for(k=ss.n+1; k>=1; k--)
    // {
    // turn(&ss,k);
    // printState(&ss);
    // }
    printSolution(&ss);
    finalize(&ss);
    return 0;
    }
    
    void initialize(struct states *ss)
    {
    ss->x=NULL;
    ss->r=NULL;
    ss->stateArray=NULL;
    }
    
    void inputData(struct states *ss)
    {
    int i,j,k,n;
    scanf("%d",&ss->n); n=ss->n;
     ss->x=(int *)malloc(((ss->n)+1)*sizeof(int));
     ss->r=(int *)malloc(((ss->n)+1)*sizeof(int));
     ss->stateArray=(struct state *)malloc(((ss->n)+2)*2*sizeof(struct state));
    ss->x[0]=0; ss->r[0]=0;
    for(i=1; i<=ss->n; i++)//x,rを入力
     {
     scanf("%d",&ss->x[i]);
     scanf("%d",&ss->r[i]);
     }
    for(j=0; j<n; j++)//stateArrayを初期化
     {
     for(i=0; i<=1; i++)
      {
      for(k=1; k<=n+1; k++)
       {
       getStateArrayPtr(ss,j,k,i)->value=0;
       getStateArrayPtr(ss,j,k,i)->infinity_p=false;
       getStateArrayPtr(ss,j,k,i)->solved_p=false;
       getStateArrayPtr(ss,j,k,i)->oldK_p=false;
       getStateArrayPtr(ss,j,k,i)->oldJ_p=false;
    
       }
      //printf("\n");
      }
     }
    for(j=0; j<=n; j++)//stateArrayの境界値設定
     {
     getStateArrayPtr(ss,j,n+1,1)->infinity_p=true;
     getStateArrayPtr(ss,j,n+1,1)->solved_p=true;
     }
    for(k=1; k<=n+1; k++)
     {
     getStateArrayPtr(ss,0,k,0)->infinity_p=true;
     getStateArrayPtr(ss,0,k,0)->solved_p=true;
     }
    /*stateArrayの初期設定*/
    getStateArrayPtr(ss,1,n+1,0)->value=ss->r[1];
    getStateArrayPtr(ss,1,n+1,0)->solved_p=true;
    getStateArrayPtr(ss,0,n+1,1)->value=ss->r[n];
    getStateArrayPtr(ss,0,n+1,1)->solved_p=true;
    return;
    }
    
    //表出力関数
    void printState(struct states *ss)
    {
    int i,j,k,n; n=ss->n;
    	/*ここと*/
    	for(j=0; j<n; j++)
     {
     for(i=0; i<=1; i++)
      {
      for(k=1; k<=n+1; k++)
       {
       if(false==(getStateArrayPtr(ss,j,k,i)->solved_p)) printf(" ,,");
       else printf("**");
       }
      printf("\n");
      }
     }
      printf("\n");
    printf(".");
    for(k=1; k<=(n+1); k++) printf(",k=%d,before",k);
    printf("\n");
    for(j=0; j<=n; j++)
     {
     for(i=0; i<=1; i++)
      {
      printf("j=%d",j);
      if(0==i)printf(",i=j");
      else printf(",i=k");
      for(k=1; k<=n+1; k++) print1State(ss,j,k,i);
      printf("\n");
      }
     }
    printf("\n\n\n");
    }
    
    void print1State(struct states *ss,int j,int k,int i)
    {
    	/*ここ*/
    int a,b,c,n; a=j; b=k; c=i; n=ss->n; 
    if(j==0&&k==1)
    {
    for(j=0; j<n; j++)//stateArrayを初期化
     {
     for(i=0; i<=1; i++)
      {
      for(k=1; k<=n+1; k++)
       {
       if(false==(getStateArrayPtr(ss,j,k,i)->solved_p)) printf(" ,,");
       else printf("**");
       }
      printf("\n");
      }
     }
      printf("\n");
      j=a; k=b; i=c;
    }
    printf(" %d,%d,%d ",j,k,i);
    if(false==(getStateArrayPtr(ss,j,k,i)->solved_p)) printf(",,");
    else if(true==(getStateArrayPtr(ss,j,k,i)->infinity_p)) printf(",inf,");
    else{
    	printf(",%d",(getStateArrayPtr(ss,j,k,i)->value));
        print1StateBefore(ss,j,k,i);//まだいらない
        }
    return;
    }
    
    void print1StateBefore(struct states *ss,int j,int k,int i)
    {//ひとつの状態の前の状態がどれであるか書く
    if(true==getStateArrayPtr(ss,j,k,i)->oldJ_p)
     {
     if(true==getStateArrayPtr(ss,j,k,i)->oldK_p) printf(",j=jk");
     else printf(",i=j");
     }
    else
     {
     if(true==getStateArrayPtr(ss,j,k,i)->oldK_p) printf(",i=k");
     else printf(",");
     }
    return;
    }
    
    struct state *getStateArrayPtr(struct states *ss,int j,int k,int ijk_p)
    {
    //状態のポインターを返す。ijk_p: 0 if(i==j) else 1 if(i==k)
    return((ss->stateArray)+j*((ss->n)+2)*2+k*2+ijk_p);
    }
    
    //turn
    void turn(struct states *ss,int k)
    {//DP状態のkに対する更新
    int j,nn;
    nn=ss->n;
    for(j=0; j<k; j++)
     {
     if(j<k){
    	    turn0(ss,j,k);
    		turn1(ss,j,k);
            }
     }
    return;
    }
    
    void turn0(struct states *ss,int j,int k)
    {
    }
    
    void turn1(struct states *ss,int j,int k)
    {
    }
    
    void printSolution(struct states *ss)
    {
    }
    
    void finalize(struct states *ss)
    {
    }
    
    "#.<>cddehiilnostu"