A 拉大车 1.0 秒 131,072.0 KB 100 分

拉大车是一种最简单的扑克牌玩法 一般两个人玩 当然也可以多个。 进行游戏时 每个人分一叠牌,不许看牌,按顺序每人一次出一张牌 后出的压住前面出的,谁出的牌和前面出的一样 可以将这两张相同的牌和被它们夹在中间的牌收走 然后由收牌的人再出一张 继续上面的过程 A B 两个小朋友玩拉大车 A 先出 谁收到的牌多 算谁赢 给出牌的总数量 n 以及轮流抽出的每张牌的编号 问最终两人的得分 输入 第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。

#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
int A=0,B=0,AB=0;
cin>>n;
int a[10001],p[1000],bianhao[10001];
for(int i=1;i<=n;i++){
cin>>p[i];
a[p[i]]=1;
bianhao[p[i]]=i;
if(a[p[i]]==1){
AB++;
if(AB%2==1){
if(i%2==1)A+=i-bianhao[p[i]];
if(i%2==0) B+=i-bianhao[p[i]];
}
if(AB%2==0) {
if(i%2==0)A+=i-bianhao[p[i]];
if(i%2==1) B+=i-bianhao[p[i]];
}
for(int j=bianhao[p[i]];j<=i;j++)
{
a[p[i]]=0;
bianhao[p[i]]=0;
}
}
}
cout<<A<<" "<<B;
return 0;
}