USACO Clock s_Execution Error

5918 ワード

参考:
http://blog.tomtung.com/2007/02/usaco-p58-the-clocks/
 BFSアルゴリズム(読めませんでした)
ローカルテストに合格しました。USACOがエラーを報告しました。オリジナルコードを貼り付けて、同じエラーを報告します。
 > Run 1: Execution error: Your program exited with exit status
        `127'. 

        ------ Data for Run 1 [length=19 bytes] ------
        9 9 12 
        6 6 6 
        6 3 6 
        ----------------------------

          Your program printed data to stderr.  Here is the data:
          -------------------
          program:_error_while_loading_shared_libraries:_libm.so.6:_failed_to_map_segment_from_shared_object:_Cannot_allocate_memory
          -------------------
/*
ID: nenusb1
LANG: C++
TASK: clocks
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct{
        char Time[11];//        ,   :0,1,2,3
        
        char num[28];//              ,   9*3 = 27
        char depth;//  i                 , num[0]~num[i]           ; 
        
        char operate_times[10]; //operate_times[i]       i      
        
        //                     
        char operation;//     i,     ,               i      
}Clock;

Clock Clocks[262144];

const char operate[][6] = {   /*          ,        -1  ,       9   */
      {0,0,0,0,0,0},//   1    
      {1,2,4,5,-1},//  1 
      {1,2,3,-1} ,//  2 
      {2,3,5,6,-1},
      {1,4,7,-1},
      {2,4,5,6,8,-1},
      {3,6,9,-1},
      {4,5,7,8,-1},
      {7,8,9,-1},
      {5,6,8,9,-1}
};


int main(){
    freopen("clocks.in","r",stdin);
    freopen("clocks.out","w",stdout);
    
    int i,j,k;
    

    Clocks[0].Time[0] = '0';
    for(i=1; i<=9; i++){
                int temp;
                scanf("%d",&temp);
                Clocks[0].Time[i] = (temp%12)/3 + '0';//+'0'  char 
    }
    Clocks[0].Time[10] = '\0';
    Clocks[0].operation = '1';//              1    
    Clocks[0].depth = '0';
    memset(Clocks[0].operate_times, 0,sizeof(Clocks[0].operate_times)); //   0  '0' 
    memset(Clocks[0].num,0,sizeof(Clocks[0].num));


                 
    
    //      
    //pre       ,cur     
    //    pre        9   ,    9    cur  ,
    // cur   Time[]  0,           
    int pre = 0, cur = 1;
    int flag = true;//         false
    int depth = 0;//     
    while(flag && pre<cur  ){                      //      pre < cur???????                  
            
//            for(i = 1; i<=9; i++){ 
            //                       , 
            //        ,                    。 
            //          Clocks   operation   
            // prev            ,      cur   
            
            
            

            for(i = (Clocks[pre].operation-'0'); i<=9; i++){                  
                  /*         3        */
                  if(Clocks[pre].operate_times[i]=='3') continue;
                  
                  //i      i   
                  
                  
                  strcpy(Clocks[cur].Time, Clocks[pre].Time);
                  j = 0;
                  int n=operate[i][j] ;//n  i   affect clock, Clocks[cur].Time[n]  1 
                  while(  n!=-1 ){
                          //printf("pre is %c--",Clocks[pre].Time[n]); 

                          Clocks[cur].Time[n] = ((Clocks[pre].Time[n]-'0') + 1)%4 + '0';
                                                    
                          j++;
                          n=operate[i][j];                          
                  }
                  
                  
                  //              ,          ,    i   
                  strcpy(Clocks[cur].num , Clocks[pre].num);
                  depth = Clocks[pre].depth-'0';
                  Clocks[cur].num[depth] = i + '0';
                  Clocks[cur].depth = (depth + 1) + '0';
                  
                  //operate_times[i]       i      , Clocks[cur].operate_times[i]  1
                  //strcpy(Clocks[cur].operate_times, Clocks[pre].operate_times);  
                  memcpy(Clocks[cur].operate_times, Clocks[pre].operate_times,sizeof(Clocks[0].operate_times));//    memcpy??? 
                  Clocks[cur].operate_times[i] = Clocks[cur].operate_times[i]+1;     //   int  1           
                  
                  //                     
                  Clocks[cur].operation = i+'0';      
                  
                  
      
            
                //test           
//                printf("pre = %d cur=%d
",pre,cur);             //                for(k=1; k<=9; k++){ //                     printf("for %d pre=%c cur=%c
 ",k,Clocks[pre].Time[k],Clocks[cur].Time[k]);                   //                } //                int d = Clocks[cur].depth-'0'; //                printf("seq is:
"); //                for(k=0; k<d; k++){ //                         printf("%c-",Clocks[cur].num[k]); //                }                 //                printf("
");                                           //  flag false,  while                   for(k=1; k<=9; k++){                      if (Clocks[cur].Time[k]!='0') break;                                   }                 if(k == 10) {flag=false; break;  }// for                                   //                   cur++;                                                                          }//for             //printf("%d %d
",pre,cur);             pre++;     } //while             //printf("%d %d
",pre,cur);             k = Clocks[cur].depth-'0';     printf("%c", Clocks[cur].num[0]);     for(i=1; i<k; i++){           printf(" %c",Clocks[cur].num[i]);     }        return 0; }