NUMB3RS 질문드립니다 kws4679 안녕하세요 두니발 박사의 탈옥 http://algospot.com/judge/problem/read/NUMB3RS 을 풀고있습니다. 특별한건 없고 책과 동일하게 풀었구요 그런데 자꾸 테스트를 통과하지 못해서 질문드립니다 답안 제출형식이 달라서 그런건지... 도움 부탁드릴께요~ 아래 소스코드 첨부하겠습니다. 아참 그리고 책 p276에서 중간부분에 "이때 박사가 전날 there에 있다가 오늘 here로 올 확률은 search3(here,days-1)에 ~" 부분에서 search3(there,days-1) 이 아닌지 싶습니다!! int town[51][51]; int q[51],ways[51]; int n,d,p; double cache[51][101]; double numbers(int townNumber, int days){ if(!days) return (townNumber==p?1.0:0.0); double& ret=cache[townNumber][days]; if(ret != 2) return ret; ret = 0; for(int j=0;j<n;j++) if(town[townNumber][j]) ret += numbers(j,days-1)/ways[j]; return ret; } int main(){ int c; scanf("%d", &c); while(c--){ memset(town, false, sizeof(town)); memset(ways, 0, sizeof(ways)); scanf("%d %d %d", &n, &d, &p); for(int i=0;i<n;i++){ for(int j=0;j<n;j++) { cache[i][j] = 2; scanf("%d", &town[i][j]); if(town[i][j]) ways[i] +=1; } } int t; scanf("%d", &t); for(int i=0;i<t;i++) scanf("%d", &q[i]); for(int i=0;i<t;i++) { if(i==t-1) printf("%.10lf", numbers(q[i],d)); else printf("%.10lf ", numbers(q[i],d)); } } return 0; } 11년 전
2개의 댓글이 있습니다. JongMan 이걸 고치고 제출해본 것은 아닙니다만, cache[][] 배열의 크기는 50x100인데 n < d일 때 일부만 초기화되고 있는 것은 아닌지요. 11년 전 link kws4679 오 감사합니다 수정하니 테스트를 통과하였습니다. 11년 전 link 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
kws4679
안녕하세요 두니발 박사의 탈옥
http://algospot.com/judge/problem/read/NUMB3RS
을 풀고있습니다. 특별한건 없고 책과 동일하게 풀었구요
그런데 자꾸 테스트를 통과하지 못해서 질문드립니다
답안 제출형식이 달라서 그런건지... 도움 부탁드릴께요~
아래 소스코드 첨부하겠습니다.
아참 그리고 책 p276에서 중간부분에
"이때 박사가 전날 there에 있다가 오늘 here로 올 확률은
search3(here,days-1)에 ~" 부분에서
search3(there,days-1) 이 아닌지 싶습니다!!
int town[51][51];
int q[51],ways[51];
int n,d,p;
double cache[51][101];
double numbers(int townNumber, int days){
if(!days) return (townNumber==p?1.0:0.0);
double& ret=cache[townNumber][days];
if(ret != 2) return ret;
ret = 0;
for(int j=0;j<n;j++)
if(town[townNumber][j]) ret += numbers(j,days-1)/ways[j];
return ret;
}
int main(){
int c;
scanf("%d", &c);
while(c--){
memset(town, false, sizeof(town));
memset(ways, 0, sizeof(ways));
scanf("%d %d %d", &n, &d, &p);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++) {
cache[i][j] = 2;
scanf("%d", &town[i][j]);
if(town[i][j]) ways[i] +=1;
}
}
int t;
scanf("%d", &t);
for(int i=0;i<t;i++) scanf("%d", &q[i]);
for(int i=0;i<t;i++) {
if(i==t-1) printf("%.10lf", numbers(q[i],d));
else printf("%.10lf ", numbers(q[i],d));
}
}
return 0;
}
11년 전