Submission

Status:

-PPP-PPP--

Subtask/Task Score:

60/100

Score: 60

User: theem1502

Problemset: วิศวกรรมข้อมูล

Language: c

Time: 0.002 second

Submitted On: 2025-09-28 21:24:37

#include <stdio.h>
#include <stdlib.h>

struct product{
    int numf;
    char binary[7];

};



int findhowmany(int num) {
    int start = 1;
    if (num < 2) {
        return 0;
    }
    if (num == 2) {
        return 1;
    }
    for (int i = 0; i < 100; i++) {
        if (start > num) {
            return i;
        }
        start *= 2;
    }
}

int main() {
    
    int num;
    scanf("%d", &num);
    int *thearray = malloc(num * sizeof(int));
    for (int i = 0; i < num; i++) {
        scanf("%d", &thearray[i]);
    }

    char **binaryarray = malloc(num * sizeof(char*));
    for (int i = 0; i < num; i++) {
        binaryarray[i] = malloc(7 * sizeof(char));

    }
    for (int i = 0; i < num; i++) {
        for (int j = 0; j < 7; j++) {
            binaryarray[i][j] = '0';
        }
    }

    
    for (int i = 0; i < num; i++) {
        int tempcurrentnum = thearray[i];
        int count = 0;
        while(tempcurrentnum > 0) {
            
            binaryarray[i][7-count-1] = (tempcurrentnum & 1) + '0';
            tempcurrentnum = tempcurrentnum>>1; 
            count++;
        }
    }

       

    int twocomb[2][2] = {
        {1,2},
        {2,1}
    };

    int threecomb[6][3] = {
        {1,2,3},
        {1,3,2},
        {2,3,1},
        {2,1,3},
        {3,1,2},
        {3,2,1}
    };
    
    int fourcomb[24][4] = {
        {1,2,3,4},
        {1,2,4,3},
        {1,3,4,2},
        {1,3,2,4},
        {1,4,3,2},
        {1,4,2,3},
        {2,1,3,4},
        {2,1,4,3},
        {2,3,1,4},
        {2,3,4,1},
        {2,4,3,1},
        {2,4,1,3},
        {3,1,2,4},
        {3,1,4,2},
        {3,2,1,4},
        {3,2,4,1},
        {3,4,1,2},
        {3,4,2,1},
        {4,1,2,3},
        {4,2,1,3},
        {4,1,3,2},
        {4,2,3,1},
        {4,3,2,1},
        {4,3,1,2}
    };




    struct product *therealthing = malloc(num * sizeof(struct product));


    
    int *forsome = malloc(num * sizeof(int));   
    for (int i = 0; i < num; i++) {
        forsome[i] = 0;
    }

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

        for (int j = 0; j < 7; j++) {
            if (binaryarray[i][j] != '0') {
                break;
            }
            forsome[i]++;
        }
    } 


    for (int i = 0; i < num ; i++) {
        int count = 0;
        for (int j = forsome[i]; j < 7; j++) {
            therealthing[i].binary[count++] = binaryarray[i][j];
        }
    }

    for (int i = 0; i < num; i++) {
        therealthing[i].numf = i + 1;
    }




   int maxnum = 0;
   int keeptrack = 0;

    if (num == 2) {
        for (int i = 0; i < 2; i++) {
            keeptrack = 0;
            char charmainarray[200];
            for (int j = 0; j < 2; j++) {
                for (int k = 0; k < num; k++) {
                if (therealthing[k].numf == twocomb[i][j]) {
                    for (int h = 0; h < 7 - forsome[k]; h++) {
                        charmainarray[keeptrack++] = therealthing[k].binary[h];
                        }
                    }
                }

            }
        int convertnum = 0;
        int length = keeptrack;


        int multiplier = 1;
        while (length > 0) {
            convertnum += multiplier *  (charmainarray[length-1] - '0');

            length--;
            multiplier *= 2;
        }

        

            
        if (convertnum > maxnum) {
            maxnum = convertnum;
        }
        }
    }


    if (num == 3) {
        for (int i = 0; i < 6; i++) {
            keeptrack = 0;
            char charmainarray[200];
            for (int j = 0; j < 3; j++) {
                for (int k = 0; k < num; k++) {
                if (therealthing[k].numf == threecomb[i][j]) {
                    for (int h = 0; h < 7 - forsome[k]; h++) {
                        charmainarray[keeptrack++] = therealthing[k].binary[h];
                        }
                    }
                }

            }
        int convertnum = 0;
        int length = keeptrack;


        int multiplier = 1;
        while (length > 0) {
            convertnum += multiplier *  (charmainarray[length-1] - '0');

            length--;
            multiplier *= 2;
        }

        

            
        if (convertnum > maxnum) {
            maxnum = convertnum;
        }
        }
    }


    if (num == 4) {
        for (int i = 0; i < 24; i++) {
            keeptrack = 0;
            char charmainarray[200];
            for (int j = 0; j < 4; j++) {
                for (int k = 0; k < num; k++) {
                if (therealthing[k].numf == fourcomb[i][j]) {
                    for (int h = 0; h < 7 - forsome[k]; h++) {
                        charmainarray[keeptrack++] = therealthing[k].binary[h];
                        }
                    }
                }

            }
        int convertnum = 0;
        int length = keeptrack;


        int multiplier = 1;
        while (length > 0) {
            convertnum += multiplier *  (charmainarray[length-1] - '0');

            length--;
            multiplier *= 2;
        }

        

            
        if (convertnum > maxnum) {
            maxnum = convertnum;
        }
        }
    }


    printf("%d", maxnum);
    
}