CH - 0802 占卜DIY(简单模拟,水题)
題目鏈接:點擊查看
題目大意: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為“滿堂開花,極吉”。
題目分析:按照題意直接模擬即可,兩層while套起來,用deque方便操作點,用vector記錄答案
代碼:
#include<iostream> #include<cstdlib> #include<string> #include<cstring> #include<cstdio> #include<algorithm> #include<climits> #include<cmath> #include<cctype> #include<stack> #include<queue> #include<list> #include<vector> #include<set> #include<map> #include<sstream> using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=110;const string ss=" A234567890JQK";deque<int>q[15];int cnt[15];int get_num(char ch)//懶得寫映射了,直接暴力走吧 {for(int i=1;i<=13;i++)if(ch==ss[i])return i; }int main() { // freopen("input.txt","r",stdin); // ios::sync_with_stdio(false);for(int i=1;i<=13;i++)//讀入{for(int j=0;j<4;j++){char s[5];scanf("%s",s);q[i].push_back(get_num(s[0]));}}while(q[13].size())//第一層枚舉第13堆{int cur=q[13].front();q[13].pop_front();while(cur!=13)//第二層模擬尋找的過程{cnt[cur]++;int temp=cur;cur=q[cur].back();q[temp].pop_back();}}int ans=0;for(int i=1;i<=12;i++)//統計答案if(cnt[i]==4)ans++;printf("%d\n",ans);return 0; }?
總結
以上是生活随笔為你收集整理的CH - 0802 占卜DIY(简单模拟,水题)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: POJ - 2965 The Pilot
- 下一篇: (转)二维平面坐标系-最近点对模板