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

模拟_CH0802_占卜DIY

程序员文章站 2022-03-14 19:50:32
...

点此打开题目页面

思路分析:

    本题直接模拟即可, 为方便, 本人使用deque表示每堆牌, AC代码如下:

//CH0802_占卜DIY
#include <iostream>
#include <cstdio>
#include <deque>
#include <algorithm>
using namespace std;
pair<deque<int>, int> heap[14];//first[0...3]堆中牌(从上到下), second:本堆未掀开牌数 
int kcnt;//当前尚未掀开的K的个数 
void play(){
	if(!kcnt) return;
	int q = heap[13].first[0]; heap[13].first.pop_front();
	while(true){
		if(q == 13){
			--kcnt, play(); 
			return;
		}
		heap[q].first.push_front(q), --heap[q].second;
		int p = heap[q].first[4];
		heap[q].first.pop_back();
		if((q = p) == 13){
			--kcnt, play(); 
			return;
		}
	}
}
int main(){
	char ch;
	for(int i = 1, tmp; i <= 13; ++i) 
		for(int j = 1; j <= 4; ++j) 
			cin >> ch
			, tmp = ch == 'A'? 1: ch == 'J'? 11: ch == 'Q'? 12: ch == 'K'? 13: ch == '0'? 10: ch - '0'
			, heap[i].first.push_back(tmp), heap[i].second = 4;
	kcnt = 4, play();
	int res = 0; for(int i = 1; i <= 12; ++i) if(!heap[i].second) ++res;
	cout << res << endl;
	return 0;
} 

 

相关标签: 模拟