算法竞赛入门经典179页,模拟,stl
题目意思:模拟题,关键理解题目意思和样例
有 52 张扑克牌,一开始,全部排列成一行,每张牌看做是一堆牌。每次从左到右扫描, 假设当前扫描到第 x 堆牌(假设这堆牌的最上面是 x),
x 牌如果 和 x 前面第 1 张 或者第 3 张 牌匹配的话,就把第 x 堆牌最上面的那一张牌,放到与之匹配的那张牌所在堆的最上面。
优先选择最左边的牌。 如果这张牌的 左边 第1 和第3 都与之匹配,那么优先 放在第 3 个的位置。
本题要点:
1、 每一堆牌,用 stack 来存,合适不过了。
再用 vector 来存 各个栈。 vector<stack > pile;
2、后面就是模拟了, 当某个栈为空之后,这个栈需要删除,调用 vector 的erase 函数即可。
3、输出注意 单数复数问题,pile 和 piles
#include <cstdio>
#include <cstring>
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <stack>
using namespace std;
const int MaxN = 53;
int n;
struct node
{
string val;
int cnt;
};
vector<stack<node> > pile;
void handle_line(const string& line)
{
string str;
node tmp;
stringstream ss(line);
while(ss >> str)
{
tmp.val = str, tmp.cnt = 1;
stack<node> s;