SOLONG 문제 런타임에러 질문 KIMMUSIC 트라이 문제 포인터 대신 배열로 구현했는데 런타임에러 뜨네요. 왜뜨는지 도저히 모르겠습니다. #include <iostream> #include <vector> #include <string.h> #include <algorithm> using namespace std; const int GO_MAX = 26; const int CHA_MAX = 100000; vector<pair<int, string>> input; struct Trie { int cnt; int go[CHA_MAX + 1][GO_MAX]; bool output[CHA_MAX + 1]; bool goexist[CHA_MAX + 1]; int id[CHA_MAX+1]; Trie() { cnt = 1; memset(go, 0, sizeof go); memset(output, 0, sizeof output); memset(goexist, 0, sizeof goexist); memset(id, -1, sizeof id); } void insert(const char* key, int num, int node=0) { if (id[node] == -1) id[node] = num; if (*key == '\0') { output[node] = true; return; } int next = *key - 'A'; if (!go[node][next]) go[node][next] = cnt++; goexist[node] = true; insert(key + 1, num, go[node][next]); } bool find(const char* key, int node = 0) { if (*key == '\0') { return true; } int next = *key - 'A'; if (!go[node][next]) { return false; } return find(key + 1, go[node][next]); } int type(const char* key, const char* originkey, int node=0) { if (*key == '\0') return 0; int next = *key - 'A'; if (originkey == input[id[go[node][next]]].second) { return 1; } return type(key + 1, originkey, go[node][next]) + 1; } }; int main(void) { int T; cin >> T; while (T--) { int N, P; cin >> N >> P; input.clear(); bool result = true; Trie trie; for (int i = 0; i < N; ++i) { char tell[11]; int num; cin >> tell >> num; input.push_back({ -num, tell }); } sort(input.begin(), input.end()); for (int i = 0; i < input.size(); ++i) { trie.insert(input[i].second.c_str(), i); } int sum = (P-1) + P; for (int i = 0; i < P; ++i) { char tell2[11]; cin >> tell2; if (trie.find(tell2) == true) { sum += min(trie.type(tell2, tell2), (int)(strlen(tell2)-1)); } else { sum += strlen(tell2) - 1; } } cout << sum << endl; } return 0; } 3년 전
0개의 댓글이 있습니다. 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
KIMMUSIC
트라이 문제 포인터 대신 배열로 구현했는데 런타임에러 뜨네요. 왜뜨는지 도저히 모르겠습니다.
3년 전