• + 0 comments
    #include <assert.h>
    #include <ctype.h>
    #include <limits.h>
    #include <math.h>
    #include <stdbool.h>
    #include <stddef.h>
    #include <stdint.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    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<n/2;++i) {
            if(s[i]!=s[n-i-1]) {
                return false;
            }
        }
        return true;
    }
    
    
    
    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???

    w