USACO Clock s_Execution Error
5918 ワード
参考:
http://blog.tomtung.com/2007/02/usaco-p58-the-clocks/
BFSアルゴリズム(読めませんでした)
ローカルテストに合格しました。USACOがエラーを報告しました。オリジナルコードを貼り付けて、同じエラーを報告します。
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;
}