# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
321324 | seedkin | Get Hundred Points! (FXCUP4_hundred) | C++17 | 1 ms | 620 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "hundred.h"
#include <stdio.h>
#define aBit 1
#define bBit 2
#define cBit 4
#define aIdx 0
#define bIdx 1
#define cIdx 2
int dir[100][8][100]; // dir[idx][char bit][target idx] = char bit
std::string GetHundredPoints(int A, int B, int C) {
// int a, b, c;
// a = b = c = 0;
int isCorret[100];
int candi[100];
// char ans[100];
int bit[500];
bit['A'] = aBit;
bit['B'] = bBit;
bit['C'] = cBit;
// char c[5];
// c[aBit] = 'A';
// c[bBit] = 'B';
// c[cBit] = 'C';
std::string str = std::string(A, 'A') + std::string(B, 'B') + std::string(C, 'C');
for(int i =0; i < 100 ; i++) {
isCorret[i] = 0;
// ans[i] = 'A';
candi[i] = aBit | bBit | cBit;
}
for(int i =0; i< 100; i++) {
for(int j =0;j < 8; j++) {
for(int k =0; k < 100; k++) {
dir[i][j][k] = -1;
}
}
}
int result = Mark(str);
if(result == A+B+C) return str;
int prevResult = result;
for(int i = 0; i < A+B+C; i++) {
if(isCorret[i]) continue;
for(int j =i+1; j < A+B+C; j++) {
if(candi[i] == aBit || candi[i] == bBit || candi[i] == cBit) break;;
if(isCorret[j]) continue;
if(str[i] == str[j]) continue;
if((candi[i] & bit[str[j]]) == 0) continue;
if((candi[j] & bit[str[i]]) == 0) continue;
char temp = str[i];
str[i] = str[j];
str[j] = temp;
result = Mark(str);
if(result == A+B+C) return str;
int r = result - prevResult;
if(r ==0) {
temp = str[i];
str[i] = str[j];
str[j] = temp;
continue;
}
}
if(isCorret[i]) continue;
for(int j = i+1; j < A+B+C; j++) {
}
}
return str;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |