結果
問題 | No.832 麻雀修行中 |
ユーザー |
![]() |
提出日時 | 2019-05-24 22:09:25 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 1,959 bytes |
コンパイル時間 | 1,814 ms |
コンパイル使用メモリ | 172,584 KB |
実行使用メモリ | 6,948 KB |
最終ジャッジ日時 | 2024-09-17 10:45:57 |
合計ジャッジ時間 | 2,358 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 6 |
other | AC * 25 |
ソースコード
#include "bits/stdc++.h"using namespace std;#define Rep(i,n) for(int i=0;i<(int)(n);i++)#define For(i,n1,n2) for(int i=(int)(n1);i<(int)(n2);i++)#define REP(i,n) for(ll i=0;i<(ll)(n);i++)#define RREP(i,n) for(ll i=((ll)(n)-1);i>=0;i--)#define FOR(i,n1,n2) for(ll i=(ll)(n1);i<(ll)(n2);i++)#define put(a) cout<<a<<"\n"#define all(a) (a).begin(),(a).end()#define SORT(a) sort((a).begin(),(a).end())#define oorret 0#define oor(x) [&](){try{x;} catch(const out_of_range& oor){return oorret;} return x;}()typedef long long ll;typedef unsigned long long ull;typedef pair<int, int> P;template<typename T1, typename T2> inline bool chmin(T1& a, T2 b) { if (a > b) { a = b; return 1; }return 0; }template<typename T1, typename T2> inline bool chmax(T1& a, T2 b) { if (a < b) { a = b; return 1; }return 0; }bool iswh0(vector<int> hand){int r, a = hand[0], b = hand[1];for (int i = 0; i < 7; i++) {if (r = a % 3, b >= r && hand[i + 2] >= r) {a = b - r; b = hand[i + 2] - r;}else return false;}if (a % 3 == 0 && b % 3 == 0) return true;else return false;}bool iswh2(vector<int> hand){int p = 0;for (int i = 0; i < 9; i++) {p += i * hand[i];}for (int i = p * 2 % 3; i < 9; i += 3) {//ここでiを、牌の和を3で割った余りを2で割った数に初期化hand[i] -= 2;if (hand[i] >= 0) {if (iswh0(hand)) {hand[i] += 2;return true;}}hand[i] += 2;}return false;}bool isch(vector<int> hand) {REP(i, hand.size()) {if (hand[i] != 2 && hand[i] != 0) {return false;}}return true;}int main() {string s;cin >> s;int n = s.size();vector<int> hand(9, 0);REP(i, n) {hand[s[i] - '1']++;}vector<int> res;REP(i, 9) {if (hand[i] < 4) {hand[i]++;if (iswh2(hand)) {res.push_back(i + 1);}else if (isch(hand)) {res.push_back(i + 1);}hand[i]--;}}REP(i, res.size()) {put(res[i]);}return 0;}