欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【题解】CH0802占卜DIY 模拟

程序员文章站 2024-03-19 09:46:10
...

题目链接
根据题意模拟

#include<cstdio>
#include<cctype>
#include<iostream>
#include<vector>
using namespace std;
#define _rep(i,a,b) for(int i=(a);i<=(b);i++)
#define _for(i,a,b) for(int i=(a);i<(b);i++)
#define rep_(i,a,b) for(int i=(a);i>=(b);i--)
char ch;
int num,ans,f=1;
vector<pair<int,int> >vx[20];
void work(int x)
{
    if(x==13)return;
    vx[x].push_back(make_pair(0,1));
    rep_(i,vx[x].size(),0)vx[x][i+1]=vx[x][i];
    vx[x][0].first=x;vx[x][0].second=1;
    pair<int,int> tmp=vx[x].back();
    vx[x].pop_back();
    work(tmp.first);
}
int main()
{
    //freopen("in.txt","r",stdin);
    _rep(i,1,13)_rep(j,1,4)
    {
        cin>>ch;
        if(isdigit(ch)){num=ch-'0';if(!num)num=10;}
        else
        {
            switch(ch){
                case 'A':num=1;break;
                case 'J':num=11;break;
                case 'Q':num=12;break;
                case 'K':num=13;break;
            }
        }
        vx[i].push_back(make_pair(num,0));
    }
    _for(i,0,vx[13].size())work(vx[13][i].first);
    _rep(i,1,12){
        f=1;
        _for(j,0,vx[i].size())
        {
            pair<int,int> tmp=vx[i][j];
            if(tmp.second&&tmp.first==i)continue;
            else f=0;
        }
        if(f)ans++;
    }
    printf("%d\n",ans);
    return 0;
}
相关标签: 模拟