結果

問題 No.437 cwwゲーム
ユーザー @abcde
提出日時 2019-04-20 18:15:43
言語 C++11(廃止可能性あり)
(gcc 13.3.0)
結果
AC  
実行時間 112 ms / 2,000 ms
コード長 6,198 bytes
コンパイル時間 1,703 ms
コンパイル使用メモリ 170,732 KB
実行使用メモリ 6,820 KB
最終ジャッジ日時 2024-10-12 08:52:04
合計ジャッジ時間 6,953 ms
ジャッジサーバーID
(参考情報)
judge2 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 41
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

#include <bits/stdc++.h>
using namespace std;
// Use of dynamic bitset to convert decimal numbers.
// https://stackoverflow.com/questions/42759330/use-of-dynamic-bitset-to-convert-decimal-numbers
// 10 → 2.
// @param n: 210.
// @param d: 2.
// @return: 2.
string decimalToBinary(int n, int d) {
// 1. .
string ret = "";
if(n == 0){
while(ret.size() < d) ret = "0" + ret;
return ret;
}
// 2. .
int ln = abs(n);
do{
ret = string((ln & 1) ? "1" : "0") + ret;
}while((ln /= 2) > 0);
while(ret.size() < d) ret = "0" + ret;
// 3. .
if(n < 0) ret = "-" + ret;
return ret;
}
// nC3.
// ※ n , 使.
// @param n: nC3 n.
// @param l: .
// @return: nC3 .
set<string> makeCombinationBox(int n, int l){
set<string> ret;
for(int i = 0; i < l; i++){
for(int j = i + 1; j < l; j++){
for(int k = j + 1; k < l; k++){
string a(l, '0');
a[i] = a[j] = a[k] = '1';
ret.insert(a);
}
}
}
return ret;
}
// CWW.
// @param a0: 1.
// @param a1: 2.
// @param a2: 3.
// @return: true … CWW, false … CWW.
bool checkCWW(char a0, char a1, char a2){
if(a0 != '0' && a1 == a2 && a0 != a1) return true;
else return false;
}
int main() {
// 1. .
string N;
cin >> N;
while(N.size() < 13) N = "0" + N;
// cout << "N=" << N << endl;
// 2. score.
// 13C3 * 10C3 * 7C3 * 4C3 = 286 * 120 * 35 * 4 = 4804800
// 2-1. 13C3, 10C3, 7C3, 4C3 .
set<string> c13_3 = makeCombinationBox(13, 13);
set<string> c10_3 = makeCombinationBox(10, 10);
set<string> c7_3 = makeCombinationBox(7, 7);
set<string> c4_3 = makeCombinationBox(4, 4);
// for(auto &p : c13_3) cout << p << endl;
// for(auto &p : c10_3) cout << p << endl;
// for(auto &p : c7_3) cout << p << endl;
// for(auto &p : c4_3) cout << p << endl;
// 2-2. 13C3, 10C3, 7C3, 4C3 .
int a13_3[286][3];
int a10_3[120][3];
int a7_3[35][3];
int a4_3[4][3];
int r = 0;
for(auto &p : c13_3){
int c = 0;
for(int i = 0; i < 13; i++) if(p[i] == '1') a13_3[r][c] = i, c++;
r++;
}
r = 0;
for(auto &p : c10_3){
int c = 0;
for(int i = 0; i < 10; i++) if(p[i] == '1') a10_3[r][c] = i, c++;
r++;
}
r = 0;
for(auto &p : c7_3){
int c = 0;
for(int i = 0; i < 7; i++) if(p[i] == '1') a7_3[r][c] = i, c++;
r++;
}
r = 0;
for(auto &p : c4_3){
int c = 0;
for(int i = 0; i < 4; i++) if(p[i] == '1') a4_3[r][c] = i, c++;
r++;
}
// for(int i = 0; i < 286; i++) cout << a13_3[i][0] << " " << a13_3[i][1] << " " << a13_3[i][2] << endl;
// 2-3. CWW , .
int ans = 0;
// 13C3.
for(int i = 0; i < 286; i++){
int stock = 0;
int cww13_3 = 0;
string cwwI = N;
if(checkCWW(cwwI[a13_3[i][0]], cwwI[a13_3[i][1]], cwwI[a13_3[i][2]])){
cww13_3 = 100 * (cwwI[a13_3[i][0]] - '0') + 10 * (cwwI[a13_3[i][1]] - '0') + (cwwI[a13_3[i][2]] - '0');
stock = cww13_3;
// .
ans = max(ans, stock);
}
// cwwI .
cwwI.erase(a13_3[i][2], 1);
cwwI.erase(a13_3[i][1], 1);
cwwI.erase(a13_3[i][0], 1);
// 10C3.
for(int j = 0; j < 120; j++){
string cwwJ = cwwI;
int cww10_3 = 0;
if(checkCWW(cwwJ[a10_3[j][0]], cwwJ[a10_3[j][1]], cwwJ[a10_3[j][2]])){
cww10_3 = 100 * (cwwJ[a10_3[j][0]] - '0') + 10 * (cwwJ[a10_3[j][1]] - '0') + (cwwJ[a10_3[j][2]] - '0');
stock = cww13_3 + cww10_3;
// .
ans = max(ans, stock);
}else{
stock = cww13_3;
}
// cwwJ .
cwwJ.erase(a10_3[j][2], 1);
cwwJ.erase(a10_3[j][1], 1);
cwwJ.erase(a10_3[j][0], 1);
// 7C3.
for(int k = 0; k < 35; k++){
string cwwK = cwwJ;
int cww7_3 = 0;
if(checkCWW(cwwK[a7_3[k][0]], cwwK[a7_3[k][1]], cwwK[a7_3[k][2]])){
cww7_3 = 100 * (cwwK[a7_3[k][0]] - '0') + 10 * (cwwK[a7_3[k][1]] - '0') + (cwwK[a7_3[k][2]] - '0');
stock = cww13_3 + cww10_3 + cww7_3;
// .
ans = max(ans, stock);
}else{
stock = cww13_3 + cww10_3;
}
// cwwK .
cwwK.erase(a7_3[k][2], 1);
cwwK.erase(a7_3[k][1], 1);
cwwK.erase(a7_3[k][0], 1);
// 4C3.
for(int l = 0; l < 4; l++){
string cwwL = cwwK;
if(checkCWW(cwwK[a4_3[l][0]], cwwK[a4_3[l][1]], cwwK[a4_3[l][2]])){
int cww4_3 = 100 * (cwwL[a4_3[l][0]] - '0') + 10 * (cwwL[a4_3[l][1]] - '0') + (cwwL[a4_3[l][2]] - '0');
stock = cww13_3 + cww10_3 + cww7_3 + cww4_3;
// .
ans = max(ans, stock);
}else{
stock = cww13_3 + cww10_3 + cww7_3;
}
}
}
}
}
// 4. .
// ex.
// 253432030884 (344) -> 253203088 (588) -> 232030 (233) -> 200 (200) -> , 1365.
cout << ans << endl;
return 0;
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0