• 2021昆明站K-Riichi!!(麻将)


    代码:

    #include<bits/stdc++.h>
    
    using namespace std;
    int num[40],num2[40];
    bool check1(){//判断去掉雀门后是否胡牌
        for(int i=1;i<=9;i++){
            if(num2[i]%3){
                int x=num2[i]%3;
                if(i+2<=9&&num2[i+1]>=x&&num2[i+2]>=x){
                    num2[i]-=x;
                    num2[i+1]-=x;
                    num2[i+2]-=x;
                }else{
                    return 0;
                }
            }
        }
        for(int i=10;i<=18;i++){
            if(num2[i]%3){
                int x=num2[i]%3;
                if(i+2<=18&&num2[i+1]>=x&&num2[i+2]>=x){
                    num2[i]-=x;
                    num2[i+1]-=x;
                    num2[i+2]-=x;
                }else{
                    return 0;
                }
            }
        }
        for(int i=19;i<=27;i++){
            if(num2[i]%3){
                int x=num2[i]%3;
                if(i+2<=27&&num2[i+1]>=x&&num2[i+2]>=x){
                    num2[i]-=x;
                    num2[i+1]-=x;
                    num2[i+2]-=x;
                }else{
                    return 0;
                }
            }
        }
        for(int i=28;i<=34;i++){
            if(num2[i]%3){
                return 0;
            }
        }
        return 1;
    }
    bool check(){//判断是否胡牌
        for(int i=1;i<=34;i++){
            if(num[i]>=2){
                for(int j=1;j<=34;j++){
                    num2[j]=num[j];
                }
                num2[i]-=2;
                if(check1()){//胡牌
                    return 1;
                }
            }
        }
        return 0;
    }
    int cnt=0;
    string name(int i){
        string s;
        if(i<=9){
            s+='0'+i;
            s+='w';
        }else{
            if(i<=18){
                s+='0'+i-9;
                s+='b';
            }else{
                if(i<=27){
                    s+='0'+i-18;
                    s+='s';
                }else{
                    s+='0'+i-27;
                    s+='z';
                }
            }
        }
        return s;
    }
    int main(){
        int n;
        cin>>n;
        while(n--){
            memset(num,0,sizeof(num));
            string s;
            cin>>s;
            for(int i=0;i<28;i+=2){
                if(s[i+1]=='w'){
                    num[s[i]-'0']++;
                }
                if(s[i+1]=='b'){
                    num[s[i]-'0'+9]++;
                }
                if(s[i+1]=='s'){
                    num[s[i]-'0'+18]++;
                }
                if(s[i+1]=='z'){
                    num[s[i]-'0'+27]++;
                }
            }
            //for(int i=1;i<=34;i++){
            //    cout<<num[i]<<endl;
            //}
            if(check()){
                cout<<"Tsumo!"<<endl;
                continue;
            }
            int cnt=0;
            vector<int> ans[15];
            for(int i=1;i<=34;i++){
                if(num[i]){
                    bool flag=0;
                    num[i]--;
                    for(int j=1;j<=34;j++){
                        num[j]++;
                        if(check()){
                            flag=1;
                            ans[cnt].push_back(j);
                        }
                        num[j]--;
                    }
                    if(flag){
                        ans[cnt].push_back(i);
                        cnt++;
                    }
                    num[i]++;
                }
            }
            cout<<cnt<<endl;
            for(int i=0;i<cnt;i++){
                cout<<name(ans[i][ans[i].size()-1])<<' ';
                for(int j=0;j<ans[i].size()-1;j++)
                    cout<<name(ans[i][j]);
                cout<<endl;
            }
        }
    
    }
  • 相关阅读:
    JavaMail
    Web的文件下载
    Web的文件上传
    Tcp 数据对象传输接口对象设计
    m个元素中选取n的组合
    PyQT Quick Start
    版本发布自动触发测试
    plantUML 实操
    Python 版本对比
    Some Python Tricks
  • 原文地址:https://www.cnblogs.com/xuanzo/p/14645324.html
Copyright © 2020-2023  润新知