fork download
  1. import System.IO
  2.  
  3. quicksort [] = []
  4. quicksort (x:xs) = quicksort [y | y <- xs, y < x] ++ [x] ++ quicksort [y | y <- xs, y >= x]
  5.  
  6. main = print . quicksort =<< getLine
  7.  
Success #stdin #stdout 0.01s 3600KB
stdin
#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)
{
}
stdout
"#.<>cddehiilnostu"