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);
}