CH_0802 占卜DIY(算法竞赛进阶指南,stl,模拟)
程序员文章站
2024-03-19 09:50:58
...
算法竞赛进阶指南48页,stl,模拟
本题要点:
1、用 deque 来存放每一对扑克, 因为 deque 可以两头放数据。 用数字,表示扑克的大小,deque
2、4 条命,剩下的就是模拟运行过程。
3、题目要求的是,每堆牌, 4张都要正面朝上,因此,用数组 turn[i] 来存放 第 i 堆正面朝上的次数。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <vector>
#include <deque>
using namespace std;
deque<int> deq[14]; // 每堆牌放的 4 个数
int turn[14]; //每堆牌正面朝上的次数
char s[2];
int char_to_int[256];
void solve()
{
int life = 4;
int card;
while(life)
{
card = deq[13].front();
deq[13].pop_front();
while(card != 13)
{
deq[card].push_front(card);
turn[card]++; //每堆牌正面朝上的次数
int tmp = deq[card].back();
deq[card].pop_back();
card = tmp; // 这里注意一下, card 最后赋值
}
--life;
}
int ans = 0;
for(int i = 1; i <= 12; ++i)
{
if(turn[i] == 4)
++ans;
}
printf("%d\n", ans);
}
int main()
{
for(int i = 2; i <= 9; ++i)
char_to_int['0' + i] = i;
char_to_int['0' + 0] = 10;
char_to_int['A' + 0] = 1, char_to_int['J' + 0] = 11;
char_to_int['Q' + 0] = 12, char_to_int['K' + 0] = 13;
for(int i = 1; i <= 13; ++i)
{
for(int j = 0; j < 4; ++j)
{
scanf("%s", s);
deq[i].push_back(char_to_int[s[0] + 0]);
}
}
solve();
return 0;
}
/*
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
*/
/*
9
*/
上一篇: MD5加密算法
下一篇: CH0802 占卜DIY(模拟)