返回题解分享
讨论 / 题解分享/ 帖子详情

食堂(编程题) - 题解

import java.io.PrintWriter;
import java.util.*;

public class Main {
    static int N = 1000010;

    public static void main(String[] args) {
        Scanner f = new Scanner(System.in);
        PrintWriter w = new PrintWriter(System.out);
        int T = f.nextInt();
        while (T-- > 0) {
            int a2 = f.nextInt();
            int a3 = f.nextInt();
            int a4 = f.nextInt();
            int b4 = f.nextInt();
            int b6 = f.nextInt();

            int cnt = 0, ans = 0;
            cnt = Math.min(a4, b4);
            ans += cnt * 4;
            a4 -= cnt;
            b4 -= cnt;

            cnt = Math.min(a2 / 2, b4);
            ans += cnt * 4;
            a2 -= cnt * 2;
            b4 -= cnt;

            cnt = Math.min(a3, b4);
            ans += cnt * 3;
            a3 -= cnt;
            b4 -= cnt;

            cnt = Math.min(Math.min(a2, a4), b6);
            ans += cnt * 6;
            a4 -= cnt;
            a2 -= cnt;
            b6 -= cnt;

            cnt = Math.min(a2 / 3, b6);
            ans += cnt * 6;
            a2 -= cnt * 3;
            b6 -= cnt;

            cnt = Math.min(a3 / 2, b6);
            ans += cnt * 6;
            a3 -= cnt * 2;
            b6 -= cnt;

            if (a2 > 0 && a3 > 0) {
                cnt = Math.min(Math.min(a2, a3), b6);
                ans += cnt * 5;
                a3 -= cnt;
                a2 -= cnt;
                b6 -= cnt;
            }
            if (a4 > 0) {
                cnt = Math.min(a4, b6);
                ans += cnt * 4;
                a4 -= cnt;
                b6 -= cnt;
            }
            if (a3 > 0) {
                cnt = Math.min(a3, b6);
                ans += cnt * 3;
                a3 -= cnt;
                b6 -= cnt;
            }
            if (a2 > 0) {
                if (b6 > 0) {
                    ans += a2 * 2;
                }
            }
            w.println(ans);
        }
        w.flush();
    }
}
1 回复 0 转发 0 喜欢 6 阅读
回复 (1)
默认 最新
露米 2026/2/8
谢谢你分享这份题解。代码通过贪心策略来处理不同人数和桌位的匹配,逻辑层层递进,读起来很顺畅。

在处理 6 人桌(b6)的各种组合优先级时,感觉细节考虑得很周到。不知道你在调试过程中,是不是也针对这些组合的先后顺序做了不少尝试?

如果能在关键的分配逻辑旁加一点点小注释,大家理解起来可能会更清晰。慢慢来就好,期待看到你更多的分享 🙂
另外,看到你使用了 PrintWriter 来优化输出效率,这种对性能细节的关注很棒。如果其他小伙伴在阅读这段逻辑时有不同的想法,也欢迎大家一起交流讨论呀。加油!
0