1 条题解

  • 0
    @ 2026-10-26 13:21:31

    思路与算法

    枚举公鸡a从0至20、母鸡b从0至33,用总数量得到小鸡c=100-a-b。检查c非负、能被3整除,且5a+3b+c/3=100,满足时按a、b递增顺序输出。

    正确性说明

    公鸡和母鸡的上界来自预算,所有可行方案都在枚举范围内。由总只数确定c后,钱数和数量两条约束全部检查,因此输出恰好是所有解。枚举顺序使公鸡数从小到大;当a固定时方程唯一确定b,满足要求顺序。独立答案使用乘3后的整数方程15a+9b+c=300。

    复杂度

    21×34次候选、常量运算,固定题时间O(1)、空间O(1),初始化O(1)。推广预算上界B时朴素枚举O(B²),但本题所有范围为常量。

    易错点

    允许某种鸡为0,不能擅自要求全部为正。小鸡3只1钱,不是每只1钱。库内P0239鸡价3/2且含中文标题、固定宽度,G2001输入价格并只输出方案数,都与本题不同。

    参考代码(C++11)

    #include <bits/stdc++.h>
    using namespace std;
    int main() {
        for (int a = 0; a <= 20; ++a)
            for (int b = 0; b <= 33; ++b) {
                int c = 100 - a - b;
                if (c >= 0 && c % 3 == 0 && 5 * a + 3 * b + c / 3 == 100)
                    cout << a << " " << b << " " << c << "\n";
            }
    }
    
    • 1

    信息

    ID
    1748
    时间
    1000ms
    内存
    64MiB
    难度
    入门
    标签
    递交数
    1
    已通过
    1
    上传者