omh9876   7일 전

퀵소트를 사용하여 풀었는데 틀렸다고


dldyddlwl   4일 전

아래에 있습니다.

omh9876   3일 전

반례 보고 어디가 틀렸는지 깨닫고 고쳤습니다만 계속 틀렸다고 나옵니다.

이번엔 어디가 잘못된 걸까요?

답변해 주셔서 감사합니다.



#define _CRT_SECURE_NO_WARNINGS

#include

#include

int n, sum = 0;

char s[20030][53];

void quick(int left, int right) {

if (left < right) {

int i = left - 1;

int j = right + 1;

int key = (i + j) / 2;

int len = strlen(s[key]);

char temp[51];

char ks[51];

strcpy(ks,s[key]);

while (1) {

while (strlen(s[++i]) < len || (strlen(s[i]) == len && strcmp(s[i], ks) == -1)) {

// printf("%d %s %s %d\n", strcmp(s[i], ks),s[i],ks,i);

}

while (strlen(s[--j]) > len || (strlen(s[j]) == len && strcmp(s[j], ks) == 1)) {}

//printf("%s %d %s %d\n", s[i], i, s[j], j);

// printf(" %d %d\n", i, j);

if (i >= j)

break;

strcpy(temp, s[j]);

strcpy(s[j], s[i]);

strcpy(s[i], temp);

}

quick(left, i - 1);

quick(j + 1, right);

}

}

int main() {

scanf("%d", &n);

for (int i = 0; i < n; i++) {

scanf(" %s", s[i]);

}

for (int i = 0; i < n - 1; i++) {

for (int j = i + 1; j < n; j++) {

if (strcmp(s[i], s[j]) == 0) {

n--;

strcpy(s[j], s[n]);

j--;

}

}

}

quick(0, n - 1);

for (int i = 0; i < n; i++) {

printf("%s\n", s[i]);

}

return 0;

}

dldyddlwl   3일 전

아래에 있습니다!

댓글을 작성하려면 로그인해야 합니다.