#include "hundred.h"
#include <bits/stdc++.h>
std::string GetHundredPoints(int A, int B, int C) {
using namespace std;
assert(A + B + C == 100);
string str = string(A, 'A') + string(B, 'B') + string(C, 'C');
if(A == 100 || B == 100 || C == 100) return str;
string ans(A + B + C, 'A');
int value = Mark(str);
auto f = [&](int a, int b){
string new_str = str;
swap(new_str[a], new_str[b]);
int diff = (Mark(new_str) - value) * (str[b] - str[a]) % 3;
if(diff < 0) diff += 3;
ans[b] = ((ans[a] - 'A' + diff) % 3) + 'A';
};
if(A && B){
for(int i = A; i < A+B+C; i++) f(0, i);
for(int i = 1; i < A; i++) f(A, i);
} else {
for(int i = A+B; i < A+B+C; i++) f(0, i);
for(int i = 1; i < A+B; i++) f(A+B, i);
}
for(int i = 0; i < 3; i++){
map<char , int> cnt;
for(char x : ans) cnt[x] += 1;
if(cnt['A'] == A && cnt['B'] == B && cnt['C'] == C) return ans;
for(char& x : ans) x = 'A' + ((x - 'A' + 1) % 3);
}
assert(false);
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
7 ms |
256 KB |
Output is correct |
2 |
Correct |
7 ms |
344 KB |
Output is correct |
3 |
Correct |
8 ms |
384 KB |
Output is correct |
4 |
Correct |
8 ms |
384 KB |
Output is correct |
5 |
Correct |
8 ms |
384 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
7 ms |
256 KB |
Output is correct |
2 |
Correct |
7 ms |
344 KB |
Output is correct |
3 |
Correct |
8 ms |
384 KB |
Output is correct |
4 |
Correct |
8 ms |
384 KB |
Output is correct |
5 |
Correct |
8 ms |
384 KB |
Output is correct |
6 |
Correct |
7 ms |
344 KB |
Output is correct |
7 |
Correct |
7 ms |
256 KB |
Output is correct |
8 |
Correct |
6 ms |
384 KB |
Output is correct |
9 |
Correct |
8 ms |
256 KB |
Output is correct |
10 |
Correct |
5 ms |
344 KB |
Output is correct |
11 |
Correct |
6 ms |
344 KB |
Output is correct |
12 |
Correct |
5 ms |
256 KB |
Output is correct |
13 |
Correct |
7 ms |
344 KB |
Output is correct |
14 |
Correct |
8 ms |
344 KB |
Output is correct |
15 |
Correct |
8 ms |
384 KB |
Output is correct |
16 |
Correct |
8 ms |
256 KB |
Output is correct |