• 占卜DIY


    4722: 占卜DIY

    Time Limit: 1 Sec  Memory Limit: 128 MB
    Submit: 34  Solved: 19
    [Submit][Status][Web Board]

    Description

    lyd学会了使用扑克DIY占卜。方法如下:一副去掉大小王的扑克共52张,打乱后均分为13堆,编号1~13,每堆4张,其中第13堆称作“生命牌”,也就是说你有4条命。这里边,4张K被称作死神。
    初始状态下,所有的牌背面朝上扣下。
    流程如下:
    1.抽取生命牌中的最上面一张(第一张)。
    2.把这张牌翻开,正面朝上,放到牌上的数字所对应编号的堆的最上边。(例如抽到2,正面朝上放到第2堆牌最上面,又比如抽到J,放到第11堆牌最上边,注意是正面朝上放)
    3.从刚放了牌的那一堆最底下(最后一张)抽取一张牌,重复第2步。(例如你上次抽了2,放到了第二堆顶部,现在抽第二堆最后一张发现是8,又放到第8堆顶部.........)

    4.在抽牌过程中如果抽到K,则称死了一条命,就扔掉K再从第1步开始。
    5.当发现四条命都死了以后,统计现在每堆牌上边正面朝上的牌的数目,只要同一数字的牌出现4张正面朝上的牌(比如4个A),则称“开了一对”,当然4个K是不算的。
    6.统计一共开了多少对,开了0对称作"极凶",1~2对为“大凶”,3对为“凶”,4~5对为“小凶”,6对为“中庸”,7~8对“小吉”,9对为“吉”,10~11为“大吉”,12为“满堂开花,极吉”。

    如果还不明白,就去看样例把。。。

    Input

    一共13行,为每堆牌的具体牌是什么(不区分花色只区分数字),每堆输入的顺序为从上到下。
    为了便于读入,用0代表10,那么A,J,Q,K(大写)就不用说了吧。。。

    Output

    一共开了几对。

    Sample Input

    8 5 A A
    K 5 3 2
    9 6 0 6
    3 4 3 4
    3 4 4 5
    5 6 7 6
    8 7 7 7
    9 9 8 8
    9 0 0 0
    K J J J
    Q A Q K
    J Q 2 2
    A K Q 2

    Sample Output

    9
    #include<cstdio>
    #include<algorithm>
    #include<deque>
    using namespace std;
     
    struct my{
           bool z;
           int x;
    };
     
    deque<my>a[20];
    int vis[100];
     
    int main(){
        char l[10];
        char p;
        my st;
        for (int i=1;i<=13;i++){
            for (int j=1;j<=4;j++){
                scanf("%s",l);
                p=l[0];
                if(p=='A'){
                    st.x=1;
                    st.z=0;
                    a[i].push_front(st);
                }
                else if(p=='J'){
                    st.x=11;
                    st.z=0;
                    a[i].push_front(st);
                }
                else if(p=='Q'){
                    st.x=12;
                    st.z=0;
                    a[i].push_front(st);
                }
                else if(p=='K'){
                    st.x=13;
                    st.z=0;
                    a[i].push_front(st);
                }
                else if(p=='0'){
                    st.x=10;
                    st.z=0;
                    a[i].push_front(st);
                }
                else {
                    st.x=p-'0';
                    st.z=0;
                    a[i].push_front(st);
                }
            }
        }
        my top;
        my top1;
        for (int t=0;t<4;t++){
            top=a[13].back();
            a[13].pop_back();
            top.z=1;
            if(top.x==13) continue;
            while(top.x!=13) {
                a[top.x].push_back(top);
                top1=top;
                top=a[top.x].front();
                a[top1.x].pop_front();
                top.z=1;
            }
        }
        for (int i=1;i<=13;i++){
            for (int j=0;j<a[i].size();j++){
                if(a[i][j].z) vis[a[i][j].x]++;
            }
        }
        int ans=0;
        for(int i=1;i<=12;i++){
            if(vis[i]==4) ans++;
        }
        printf("%d
    ",ans);
    return 0;
    }
     

    HINT

    Source

    [Submit][Status]
  • 相关阅读:
    一轮项目冲刺——移山小分队(9)
    一轮项目冲刺——移山小分队(8)
    一轮冲刺项目——移山小分队(7)
    一轮项目冲刺——移山小分队(6)
    一轮项目冲刺——移山小分队(5)
    一轮项目冲刺——移山小分队(4)
    一轮项目冲刺——移山小分队(3)
    一轮项目冲刺——移山小分队(2)
    一轮项目冲刺——移山小分队(1)
    C# 记录循环消耗时间
  • 原文地址:https://www.cnblogs.com/lmjer/p/8969601.html
Copyright © 2020-2023  润新知