题库练习 拖拉机(tractor)

A71876 | 拖拉机(tractor)

来源编程题
时间限制1s
内存限制512MB
通过 / 提交0/0

题目描述

欢乐谷是企鹅公司开发的一个棋牌类益智游戏平台,玩家第一次进平台时,企鹅公司会发给每个玩家一定数量的欢乐豆,欢乐豆是企鹅公司最基本使用的道具之一,可用来玩平台上的各种游戏,属于一种游戏中的虚拟货币。

欢乐谷既有围棋、象棋、桥牌等烧脑游戏,也有 80 分升级(俗称拖拉机)这种广受欢迎的雅俗共赏的经典牌类游戏。该游戏由两副牌四个人玩,分为两个阵营:1 号玩家和 3 号玩家为一个阵营,2 号玩家和 4 号玩家则组成另一个阵营。发牌逆时针进行,牌的大小区分简单,主牌大于副牌,主牌中大小王最大。出牌时需按照规则出对子或拖拉机等,尽量出大牌得分。庄家需保住底牌,最后如果被撬底则得分翻番,具体翻几番要看撬底是单张、对子、拖拉机。玩家需注意对手的牌,尽量让对手得分不超过 80 分。

80 分升级有一套复杂的结算规则,首先根据出牌中拖拉机的出现次数、得分情况和撬底番数,得出最终的应胜豆和应输豆,应胜豆等于应输豆。一局开始前四位玩家的欢乐豆数量是已知的,假设 1 号玩家和 3 号玩家取得胜利,应胜豆为 180 欢乐豆,则一局升级下来 1 号玩家和 3 号玩家的欢乐豆都将增加 180 颗,2 号玩家和 4 号玩家的欢乐豆都将减少 180 颗,但实际情况往往不会这么理想,如果 2 号玩家欢乐豆不足 180 颗,则 2 号玩家输光所有欢乐豆,1 号玩家和 3 号玩家平分赢得的欢乐豆,前提是开局前的欢乐豆的数量要不小于赢得的欢乐豆数量。具体的结算规则如下:

假设四位玩家游戏开始前的欢乐豆数量用ABCD表示,应输豆用 E表示,并且胜方为 1 号玩家和 3 号玩家,min 函数为求两数最小值函数,如 min(3,5)=3

  • 1. 计算负方理论上的总输豆 F,本条规则中的输豆均为理论上的输豆的简称, F=2 号玩家输豆 +4 号玩家输豆,其中 2 号玩家输豆 =min(B,E)4 号玩家输豆 =min(D,E)

  • 2. 计算胜方最终胜豆,假设F肯定是偶数,则 1 号玩家最终胜豆 =min(A,F/2)3 号玩家最终胜豆=min(C,F/2)

  • 3. 输豆返还,如果 min(A,F/2)+min(C,F/2) \lt F,则胜方并没有瓜分完负方理论上的总输豆,此时要把胜方分剩下的欢乐豆返还给输方,返还规则为先返还给输方中输得多的一方,直到返还完或两家输方输的欢乐豆同样多,然后将未返还完的欢乐豆平分给两家输方。具体细节见样例 3 的解释。

现在企鹅公司找到你,要你写一个 80 分升级的结算程序。为了简单起见,假设胜方永远是 1 号玩家和 3 号玩家。

输入格式

输入数据仅有一行包含 5 个用空格隔开的正整数,分别表示A,B,C,D,E5 个数一定都是 8 的倍数。

输出格式

输出数据仅有一行包含 4 个正整数,表示一局结束后四家的欢乐豆数量,相邻两数严格用一个空格隔开。

输入输出样例

输入 #1
2400 2400 1000 2000 800
输出 #1
3200 1600 1800 1200
输入 #2
6400 4000 3600 20000 4800
输出 #2
10800 0 7200 16000
输入 #3
20000 6600 3200 9736 9600
输出 #3
28100 950 6400 4086
C++ 编辑器
输入
输出