2개의 댓글이 있습니다.
-
-
rlatkddn212 -
와..가상의 시작단어를 만든다는게 이런 뜻이였군요.
덕분에 해결했습니다... 굉장한 트릭이네요.
코드를 자세히 본건 아닌데 -1을 배열에 넣을수 없으니
B[i] 부분을 행렬 T에 넣어 버려서 m+1 크기로 만드신 것 같아요.
그 부분에서 잘못참조 되서 문제가 있지 않았을까요?..
아무튼 저는 B[i] 부분을 행렬 T에 넣기는 하지만for (int i = 0; i < m; i++)
{
cin >> temp;
T[m][i] = log(temp);
}이런식으로 행렬 T의 제일 끝쪽에 넣어서 recognize 함수 안에 있는
for (int thisMatch = 0; thisMatch < m; ++thisMatch){} 반복문을 피하게 했어요..
호출할 때는 recognize(0, m); 사용했습니다.
9년 전 link
-
-
정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
sven
OCR
책의 코드대로 짜보려고 했습니다만, 잘 되지 않습니다.
recognize 함수의 끝부분의 assert(choose != 0) 에서 걸려서, 런타임 에러가 뜹니다.
문제가 되는 예제 데이터를 찾아보려고 했는데, 쉽지 않네요ㅜㅜ
책의 트릭대로 가상의 단어 하나를 만들어서 생각했고, 각 변수의 범위를 선언부에 주석으로 적어두었습니다. choose 값이 0이라는 것은, choice[segment][previousMatch] 값 그대로라는 뜻이고, if(ret < cand) 루프 속으로 들어간 적이 없다는 의미입니다.
(0은 가상의 단어이기 때문에, 루프를 1부터 M까지 돌고, choose 값은 [1, M] 이어야 합니다.)
10년 전