B4391 [常州市赛 2025] 拖拉机

#include <bits/stdc++.h>
#define ll long long
using namespace std;

int main() {
    ll a, b, c, d, e;
    cin >> a >> b >> c >> d >> e;  // 输入五位玩家的初始豆数和应输豆E
    
    // 规则1:计算2号和4号玩家的理论输豆量
    ll lb = min(b, e);  // 2号玩家最多输e个豆,但不能超过其原有豆数b
    ll ld = min(d, e);  // 4号玩家最多输e个豆,但不能超过其原有豆数d
    
    // 从2号和4号玩家扣除相应的豆子
    b -= lb;
    d -= ld;
    
    // 计算总输豆量F
    ll f = lb + ld;
    
    // 规则2:计算1号和3号玩家的胜豆量
    ll wa = min(a, f / 2);  // 1号玩家最多赢f/2个豆,但不能超过其原有豆数a
    ll wc = min(c, f / 2);  // 3号玩家最多赢f/2个豆,但不能超过其原有豆数c
    
    // 给1号和3号玩家增加胜豆
    a += wa;
    c += wc;
    
    // 规则3:如果胜方实际赢得的豆数小于总输豆量,需要进行返还
    if (wa + wc < f) {
        ll fh = f - wa - wc;  // 计算需要返还的豆子总量
        
        // 情况1:全部返还给2号玩家后,2号玩家仍然输得比4号多(或相等)
        if (lb - fh >= ld) {
            b += fh;  // 全部返还给2号玩家
        }
        // 情况2:全部返还给4号玩家后,4号玩家仍然输得比2号多(或相等)
        else if (ld - fh >= lb) {
            d += fh;  // 全部返还给4号玩家
        }
        // 情况3:2号玩家原本输得比4号多,但返还后4号玩家会输得更少
        else if (lb - fh < ld && lb > ld) {
            fh -= lb - ld;  // 先返还lb-ld个豆给2号玩家,使两家输豆相同
            b += lb - ld;   // 2号玩家获得部分返还
            b += fh / 2;    // 剩余的豆子平均分配给两家输方
            d += fh / 2;
        }
        // 情况4:4号玩家原本输得比2号多,但返还后2号玩家会输得更少
        else if (ld - fh < lb && ld > lb) {
            fh -= ld - lb;  // 先返还ld-lb个豆给4号玩家,使两家输豆相同
            d += ld - lb;   // 4号玩家获得部分返还
            d += fh / 2;    // 剩余的豆子平均分配给两家输方
            b += fh / 2;
        }
        // 情况5:两家输方原本输豆相同
        else if (ld == lb) {
            d += fh / 2;  // 平均返还给两家输方
            b += fh / 2;
        }
    }
    
    // 输出最终结果
    cout << a << " " << b << " " << c << " " << d;
    return 0;
}

 

解题思路

本题模拟了“80分升级”游戏的结算过程,主要涉及三个规则:

  1. 计算输方理论输豆量(不超过其原有豆数和应输豆E的最小值)

  2. 计算胜方实际胜豆量(不超过其原有豆数和总输豆量一半的最小值)

  3. 如果胜方未能赢走全部输豆,需要将剩余豆子返还给输方

关键步骤

  1. 计算理论输豆:2号和4号玩家各输min(B,E)和min(D,E)个豆

  2. 计算实际胜豆:1号和3号玩家各赢min(A,F/2)和min(C,F/2)个豆

  3. 返还处理:如果实际赢豆总量小于理论输豆总量,需要将差额按特定规则返还:

    • 优先返还给输得多的玩家

    • 如果返还后两家输豆相同,则平均分配剩余豆子

posted @ 2025-09-10 14:49  CRt0729  阅读(9)  评论(0)    收藏  举报