회원가입
로그인
Toggle navigation
문제
문제
전체 문제
문제 출처
단계별로 풀어보기
알고리즘 분류
추가된 문제
문제 순위
문제
푼 사람이 한 명인 문제
아무도 못 푼 문제
최근 제출된 문제
최근 풀린 문제
랜덤
출처
ICPC
Olympiad
한국정보올림피아드
한국정보올림피아드시․도지역본선
전국 대학생 프로그래밍 대회 동아리 연합
대학교 대회
카카오 코드 페스티벌
Coder's High
ICPC
Regionals
World Finals
Korea Regional
Africa and the Middle East Regionals
Europe Regionals
Latin America Regionals
North America Regionals
South Pacific Regionals
문제집
대회
1
채점 현황
랭킹
게시판
그룹
더 보기
재채점 기록
블로그
강의
실험실
도움말
BOJ Stack
BOJ Book
전체
공지
자유
질문
오타/오역/요청
게시판 공지
홍보
업데이트
solved.ac
글쓰기
질문 도움말
자주묻는 질문
10816 런타임 오류 질문드려요 (C++)
10816번 - 숫자 카드 2
kiyaaa
2년 전
0
런타임 오류인데 어렵네요;;
#include #define SIZE 500003 #define ui unsigned int int N, M, bcnt, hcnt, idcnt, cnt[SIZE], arrList[SIZE]; //struct data { // int value; // data* prev; // data* next; // data* alloc(int _value, data* _prev, data* _next) { // value = _value, next = _next; // return this; // } //}buf[SIZE], *head[SIZE]; struct HASH { int cid; int num; HASH* next; HASH* myAlloc(int _cid, int _num, HASH* _next) { cid = _cid, num = _num, next = _next; return this; } }*hash[SIZE], hbuf[SIZE]; int search(int num) { ui value = 0; if (num < 0) value = 10000000 - num; else value = num; value %= SIZE; for (HASH* p = hash[value]; p; p = p->next) { if (p->num == num) return p->cid; } hash[value] = hbuf[hcnt++].myAlloc(++idcnt, num, hash[value]); //hash[++idcnt] = buf[bcnt++].myAlloc(idcnt, num, head[idcnt], head[idcnt]->next); return idcnt; } void add(int num) { int cid = search(num); cnt[cid]++; //buf[bcnt++].alloc(num, head[cid], head[cid]->next); } int main() { for (int i = 0; i < SIZE; i++) hash[i] = 0; scanf("%d", &N); for (int i = 0; i < N; i++) { int tmpInt = 0; scanf("%d ", &tmpInt); add(tmpInt); } scanf("%d", &M); for (int i = 0; i < M; i++) { //int tmpInt = 0; scanf("%d", &arrList[i]); } //for (int i = 0; i < M; i++) { // //int tmpInt = 0; // printf("%d", arrList[i]); //} //printf("\n"); for (int i = 0; i < M; i++) { int cid = search(arrList[i]); printf("%d ", cnt[cid]); } printf("\n"); return 0; }
dldyddlwl
2년 전
0
아래에 있습니다.
void add(int num) { int cid = search(num); // 숫자는 최대 50만개까지 들어옵니다. 그렇다면 cnt[cid]++; // 50만번의 search가 일어납니다. } for (int i = 0; i < M; i++) { int cid = search(arrList[i]); // 찾는 숫자도 마찬가지로 최대 50만개까지 들어옵니다. printf("%d ", cnt[cid]); // 마찬가지로 search가 50만번 일어납니다. } int search(int num) { ui value = 0; if (num < 0) value = 10000000 - num; else value = num; value %= SIZE; for (HASH* p = hash[value]; p; p = p->next) { if (p->num == num) return p->cid; } hash[value] = hbuf[hcnt++].myAlloc(++idcnt, num, hash[value]); // 이 과정에서 hbuf배열의 크기를 넘어설 return idcnt; // 가능성이 있습니다. 왜냐하면, 100만번의 search 모두가 } // 값이 다른 경우 모두 새로운 해시를 만들어야하므로, hcnt가 size를 넘어서기 때문입니다.
댓글을 작성하려면
로그인
해야 합니다.
kiyaaa 2년 전
런타임 오류인데 어렵네요;;