拉大车(C++,求思路)

题目描述:
进行游戏时 每个人分一叠牌 不许看牌 按顺序每人一次出一张牌 后出的压住前面出的 谁出的牌和前面出的一样 可以将这两张相同的牌和被它们夹在中间的牌收走 然后由收牌的人再出一张 继续上面的过程。
A B 两个小朋友玩拉大车 A 先出 谁收到的牌多 算谁赢 给出牌的总数量  以及轮流抽出的每张牌的编号 问最终两人的得分。

输入
第1行:1个数字 n 表示牌的数量(2 <= n <= 100000)
第2-n+1行:每行一个数字 p[i]对应牌的编号(1 <= P[i] <= 1000)输出
输出共 2 个数字 中间用空格分隔 对应A B的得分。数据范围
2 <= n <= 100000 1 <= P[i] <= 1000

输入样例
7
2
1
3
1
3
2
3

输出样例
3 3

样例解释
A出2 B出1 A出3 B出1(拿走1 3 1 剩下:2) B出3(B赢了先出)A出2(拿走2 3 2 不剩下任何牌)A出3。

模拟题,难点在于出牌时如何判断压住的有一样的牌,且一样的牌的位置。
如何判断之前有一样的牌:用一个数组arr存放已经出现过牌的次数,如果i数字牌被压住arr[i]++,如果i数字牌被收走arr[i]--。
一样牌的位置:可以用栈来解决,每次压一张牌就入一次栈,当前压入的牌是x,如果arr[x]!=0就出栈到第一个等于x的数,这中间出栈的牌数就是被夹住的牌数。

刘俊鹏???