• + 0 comments

    include

    include

    include

    include

    include

    include

    include

    include

    include

    include

    char* readline(); char* ltrim(char*); char* rtrim(char*);

    int parse_int(char*);

    /* * Complete the 'solve' function below. * * The function is expected to return a DOUBLE. * The function accepts STRING s as parameter. / bool is_palindrome(const char s){ int n=strlen(s); for(int i=0;i

    int min_swaps_to_palindrome(char* s){ int n=strlen(s); int swaps=0;

    for(int i=0;i<n/2;++i) {
        int left = i;
        int right = n-left-1;
    
        while(left<right && s[left] != s[right]){
            right--;
            }
        if (left==right) {
            if(n % 2== 1) {
        for (int j=right;j<n-left-1;++j) {
            char temp = s[j];
            s[j]=s[j+1];
            s[j+1]=temp;
            swaps++;
        } continue;
            } else {
                    return -1;
                }
            } else {
                    for (int j=right;j<n-left-1;++j) {
                        char temp =s[j];
                        s[j]=s[j+1];
                        s[j+1]=temp;
                        swaps++;
                    }
                }
    } 
    return swaps;
    

    }

    double solve(char* s) { if(is_palindrome(s)) { return 0.0; } int min_swaps=min_swaps_to_palindrome(s); if(min_swaps == -1) { return (double)INT_MAX; } return(double)min_swaps; }

    int main() { FILE* fptr = fopen(getenv("OUTPUT_PATH"), "w");

    int t = parse_int(ltrim(rtrim(readline())));
    
    for (int t_itr = 0; t_itr < t; t_itr++) {
        char* s = readline();
    
        double result = solve(s);
    
        fprintf(fptr, "%lf\n", result);
    }
    
    fclose(fptr);
    
    return 0;
    

    }

    char* readline() { size_t alloc_length = 1024; size_t data_length = 0;

    char* data = malloc(alloc_length);
    
    while (true) {
        char* cursor = data + data_length;
        char* line = fgets(cursor, alloc_length - data_length, stdin);
    
        if (!line) {
            break;
        }
    
        data_length += strlen(cursor);
    
        if (data_length < alloc_length - 1 || data[data_length - 1] == '\n') {
            break;
        }
    
        alloc_length <<= 1;
    
        data = realloc(data, alloc_length);
    
        if (!data) {
            data = '\0';
    
            break;
        }
    }
    
    if (data[data_length - 1] == '\n') {
        data[data_length - 1] = '\0';
    
        data = realloc(data, data_length);
    
        if (!data) {
            data = '\0';
        }
    } else {
        data = realloc(data, data_length + 1);
    
        if (!data) {
            data = '\0';
        } else {
            data[data_length] = '\0';
        }
    }
    
    return data;
    

    }

    char* ltrim(char* str) { if (!str) { return '\0'; }

    if (!*str) {
        return str;
    }
    
    while (*str != '\0' && isspace(*str)) {
        str++;
    }
    
    return str;
    

    }

    char* rtrim(char* str) { if (!str) { return '\0'; }

    if (!*str) {
        return str;
    }
    
    char* end = str + strlen(str) - 1;
    
    while (end >= str && isspace(*end)) {
        end--;
    }
    
    *(end + 1) = '\0';
    
    return str;
    

    }

    int parse_int(char* str) { char* endptr; int value = strtol(str, &endptr, 10);

    if (endptr == str || *endptr != '\0') {
        exit(EXIT_FAILURE);
    }
    
    return value;
    

    } where is the issue