結果
問題 | No.832 麻雀修行中 |
ユーザー |
![]() |
提出日時 | 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 |
ソースコード
#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)#endiftemplate<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;}