zoukankan      html  css  js  c++  java
  • 洛谷P2729 饲料调配 Feed Ratios

    P2729 饲料调配 Feed Ratios

    •  
    • 36通过
    • 103提交
    • 题目提供者该用户不存在
    • 标签USACO
    • 难度普及/提高-

     提交  讨论  题解  

    最新讨论

    • 暂时没有讨论

    题目背景

    农夫约翰从来只用调配得最好的饲料来喂他的奶牛。饲料用三种原料调配成:大麦,燕麦和小麦。他知道自己的饲料精确的配比,在市场上是买不到这样的饲料的。他只好购买其他三种混合饲料(同样都由三种麦子组成),然后将它们混合,来调配他的完美饲料。

    题目描述

    给出三组整数,表示 大麦:燕麦:小麦 的比例,找出用这三种饲料调配 x:y:z 的饲料的方法。

    例如,给出目标饲料 3:4:5 和三种饲料的比例:

    1:2:3 3:7:1 2:1:2 你必须编程找出使这三种饲料用量最少的方案,要是不能用这三种饲料调配目标饲料,输出“NONE”。“用量最少”意味着三种饲料的用量(整数)的和必须最小。

    对于上面的例子,你可以用8份饲料1,1份饲料2,和5份饲料3,来得到7份目标饲料:

    8*(1:2:3) + 1*(3:7:1) + 5*(2:1:2) = (21:28:35) = 7*(3:4:5)

    表示饲料比例的整数以及目标饲料的都是小于100的非负整数。表示各种饲料的份数的整数,都小于100。一种混合物的比例不会由其他混合物的比例直接相加得到。

    输入输出格式

    输入格式:

    Line 1: 三个用空格分开的整数,表示目标饲料

    Line 2..4: 每行包括三个用空格分开的整数,表示农夫约翰买进的饲料的比例

    输出格式:

    输出文件要包括一行,这一行要么有四个整数,要么是“NONE”。前三个整数表示三种饲料的份数,用这样的配比可以得到目标饲料。第四个整数表示混合三种饲料后得到的目标饲料的份数。

    输入输出样例

    输入样例#1

    3 4 5

    1 2 3

    3 7 1

    2 1 2

    输出样例#1

    8 1 5 7

    说明

    题目翻译来自NOCOW。

    USACO Training Section 3.2

    分析:刚开始没有头绪,但是看到都不超过100,就能想到这是枚举,因为只有三种饲料,那么枚举这三种饲料的数量,然后计算比例,如果发现一个比例和其他的比例不一样,那么就跳过,如果需求为0,则不能直接除,要特殊处理.

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    int a[5], b[5], c[5], ta, tb, tc,bi;
    
    int main()
    {
        scanf("%d%d%d", &a[0], &b[0], &c[0]);
        for (int i = 1; i <= 3; i++)
            scanf("%d%d%d", &a[i], &b[i], &c[i]);
        for (int i = 0; i < 100; i++)
            for (int j = 0; j < 100; j++)
                for (int k = 0; k < 100; k++)
                {
            ta = i * a[1] + j * a[2] + k * a[3];
            tb = i * b[1] + j * b[2] + k * b[3];
            tc = i * c[1] + j * c[2] + k * c[3];
            bi = 0;
            if (a[0] != 0)
                bi = ta / a[0];
            if (b[0] != 0)
                if (bi == 0)
                    bi = tb / b[0];
                else
                    if (bi != tb / b[0])
                        continue;
            if (c[0] != 0)
                if (bi == 0)
                    bi = tc / c[0];
                else
                    if (bi != tc / c[0])
                        continue;
            if (bi != 0 && a[0] * bi == ta && b[0] * bi == tb && c[0] * bi == tc)
            {
                printf("%d %d %d %d
    ", i, j, k,bi);
                return 0;
            }
                }
        printf("NONE
    ");
    
        return 0;
    }
  • 相关阅读:
    初学C#线程
    初学C#线程二
    JQuery Ajax
    算法测试
    个人报告
    202120221课程设计第三周进展
    socket测试3
    202120221课程设计任务理解与分工
    嵌入式基础
    202120221课程设计第四周进展
  • 原文地址:https://www.cnblogs.com/zbtrs/p/5947524.html
Copyright © 2011-2022 走看看