結果

問題 No.832 麻雀修行中
ユーザー yakamoto
提出日時 2019-06-14 01:34:09
言語 C++14
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 2 ms / 2,000 ms
コード長 2,383 bytes
コンパイル時間 2,053 ms
コンパイル使用メモリ 180,124 KB
実行使用メモリ 6,820 KB
最終ジャッジ日時 2024-11-06 09:33:32
合計ジャッジ時間 2,915 ms
ジャッジサーバーID
(参考情報)
judge1 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 6
other AC * 25
権限があれば一括ダウンロードができます

ソースコード

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

#include <bits/stdc++.h>
namespace DECLARATIONS {
using namespace std;
using ll = long long;
using PI = pair<int, int>;
template<class T> using V = vector<T>;
using VI = V<int>;
#define _1 first
#define _2 second
#ifdef MY_DEBUG
# define DEBUG(x) x
#else
# define DEBUG(x)
#endif
template<class T>
inline void debug(T &A) {
DEBUG(
for (const auto &a : A) {
cerr << a << " ";
}
cerr << '\n';
)
}
template<class T>
inline void debug_dim2(T &A) {
DEBUG(
for (const auto &as : A) {
debug(as);
}
)
}
template<typename ... Args>
inline void debug(const char *format, Args const &... args) {
DEBUG(
fprintf(stderr, format, args ...);
cerr << '\n';
)
}
template<typename ... Args>
string format(const std::string &fmt, Args ... args) {
size_t len = std::snprintf(nullptr, 0, fmt.c_str(), args ...);
std::vector<char> buf(len + 1);
std::snprintf(&buf[0], len + 1, fmt.c_str(), args ...);
return std::string(&buf[0], &buf[0] + len);
}
}
using namespace DECLARATIONS;
const int MOD = 1000000007;
int main() {
std::ios::sync_with_stdio(false);
cin.tie(nullptr);
string S;
cin >> S;
VI A(9);
for (char c : S) {
A[c-'1']++;
}
debug(A);
auto test = [&]() {
V<V<V<VI>>> dp(10, V<V<VI>>(5, V<VI>(5, VI(2, -1))));
dp[0][0][0][0] = 0;
for (int i = 0; i < 9; ++i) {
for (int j = 0; j < 5; ++j) {
for (int k = 0; k < 5; ++k) {
for (int l = 0; l < 2; ++l) {
auto add = [&](int m, int add3, int add2) {
int s = min(m, min(j, k));
int v3 = dp[i][j][k][l] + s + add3;
dp[i + 1][m - s][j - s][l+add2] = max(dp[i + 1][m - s][j - s][l+add2], v3);
};
if (dp[i][j][k][l] != -1) {
if (A[i] >= 2 && l == 0) add(A[i] - 2, 0, 1);
if (A[i] >= 3) add(A[i] - 3, 1, 0);
add(A[i], 0, 0);
}
}
}
}
}
int c3 = dp[9][0][0][1];
debug(dp[9][0][0]);
return c3 == 4;
};
auto test7s = [&]() {
return count_if(A.begin(), A.end(), [](int a){return a == 2;}) == 7;
};
for (int i = 0; i < 9; ++i) {
if (A[i] < 4) {
A[i]++;
if (test() || test7s()) cout << i + 1 << '\n';
A[i]--;
}
}
return 0;
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0