DOLLS - RTE 오류가 발생하는데 어떻게 해야 할지 모르겠습니다. yebgi RTE (SIGSEGV: segmentation fault, probably incorrect memory access)가 발생하는데 어디가 문제인지 모르겠네요. #include <stdio.h> #include <stdlib.h> #define MAX_T 50 #define MAX_N 100000 struct dolls_item { int idx; int num; }; int n[MAX_T]; int solve[MAX_T][MAX_N]; int qsort_dolls_item(const void *arg1, const void *arg2) { return ((struct dolls_item *)arg1)->num >= ((struct dolls_item *)arg2)->num; } void solve_dolls(int *solve, int *dolls, int n, int m) { int i, j; struct dolls_item dolls_item[MAX_N]; for (i = 0; i < n; i++) { dolls_item[i].idx = i; dolls_item[i].num = dolls[i]; } qsort(dolls_item, n, sizeof(struct dolls_item), qsort_dolls_item); for (i = 0; i < n; i++) { int min = dolls_item[i].num; if (min * (n - i) <= m) { for (j = i; j < n; j++) { dolls_item[j].num -= min; solve[dolls_item[j].idx] += min; m -= min; } } else { for (j = i; j < n; j++) { dolls_item[j].num -= (m / (n - i)); solve[dolls_item[j].idx] += (m / (n - i)); m -= (m / (n - i)); } for (j = i; j < m; j++) { dolls_item[j].num--; solve[dolls_item[j].idx]++; m--; } } } } int main(int argc, char *argv[]) { int T; int i, j; scanf("%d", &T); for (i = 0; i < T; i++) { int m; int dolls[MAX_N]; scanf("%d %d", &n[i], &m); for (j = 0; j < n[i]; j++) scanf("%d", &dolls[j]); solve_dolls((int *)&solve[i], (int *)&dolls, n[i], m); } for (i = 0; i < T; i++) { for (j = 0; j < n[i]; j++) { if (j + 1 < n[i]) printf("%d ", solve[i][j]); else printf("%d\n", solve[i][j]); } } return 0; } 8년 전
1개의 댓글이 있습니다. Being qsort()의 비교 함수가 잘못된 값을 되돌립니다. 크기에 따라 0보다 크거나 작거나 같은 값을 되돌려야 합니다. 표준을 참고하세요. 8년 전 link 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
yebgi
RTE (SIGSEGV: segmentation fault, probably incorrect memory access)가 발생하는데 어디가 문제인지 모르겠네요.
8년 전