USACO-Section3.2 Feed Ratios【克莱默法则】
题目描述:
农夫约翰从来只用调配得最好的饲料来喂他的奶牛。饲料用三种原料调配成:大麦,燕麦和小麦。他知道自己的饲料精确的配比,在市场上是买不到这样的饲料的。他只好购买其他三种混合饲料(同样都由三种麦子组成),然后将它们混合,来调配他的完美饲料。
给出三组整数,表示 大麦:燕麦:小麦 的比例,找出用这三种饲料调配 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。一种混合物的比例不会由其他混合物的比例直接相加得到。
INPUT FORMAT:
Line 1: 三个用空格分开的整数,表示目标饲料
Line 2..4: 每行包括三个用空格分开的整数,表示农夫约翰买进的饲料的比例
OUTPUT FORMAT:
输出文件要包括一行,这一行要么有四个整数,要么是“NONE”。前三个整数表示三种饲料的份数,用这样的配比可以得到目标饲料。第四个整数表示混合三种饲料后得到的目标饲料的份数。
SAMPLE INPUT
3 4 5
1 2 3
3 7 1
2 1 2
SAMPLE OUTPUT
8 1 5 7
解题思路:
将方程列出来之后就发现是解三元一次方程组问题,不过最后一行可以乘以1个正整数。原本打算用高斯消元法解决,但是逛了一下nocow后发现了利用克莱默法则的解法,代码更加简洁明了。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<algorithm>
using namespace std;
int a[3],b[3],c[3],d[3];
int fun(int a[],int b[],int c[]){//三阶行列式计算公式 return a[0]*(b[1]*c[2]-c[1]*b[2])-a[1]*(b[0]*c[2]-c[0]*b[2])+a[2]*(b[0]*c[1]-c[0]*b[1]);
}
int gcd(int a,int b){return b?gcd(b,a%b):a;
}int main(){FILE *fin = fopen ("ratios.in", "r");FILE *fout = fopen ("ratios.out", "w");fscanf(fin,"%d%d%d",&d[0],&d[1],&d[2]);fscanf(fin,"%d%d%d",&a[0],&a[1],&a[2]);fscanf(fin,"%d%d%d",&b[0],&b[1],&b[2]);fscanf(fin,"%d%d%d",&c[0],&c[1],&c[2]);int d0=fun(a,b,c);//系数矩阵 int d1=fun(d,b,c);//结果1矩阵, x1=d1/d0 int d2=fun(a,d,c);//结果2矩阵, x2=d2/d0int d3=fun(a,b,d);//结果3矩阵,x3=d3/d0 if(d0<0){d0=-d0;d1=-d1;d2=-d2;d3=-d3;}if(d0==0||d1<0||d2<0||d3<0)fprintf(fout,"NONE\n");else{int temp=gcd(d0,gcd(d1,gcd(d2,d3)));fprintf(fout,"%d %d %d %d\n",d1/temp,d2/temp,d3/temp,d0/temp);}exit(0);
}
USACO-Section3.2 Feed Ratios【克莱默法则】相关推荐
- ethos最新发布-软件升级为克莱默14.7 功能重大升级
ethos最新发布-软件升级为克莱默14.7 功能重大升级 简单 本系统 是基于原版linux系统 开发的专业用于挖掘 ETH(以太坊)以及其他 定制币种.最少的资源消耗,让您矿机以最低硬件要求安全平 ...
- 约翰-克莱默宣言——一个“善良”屠夫的自白
010年7月23日(周五) 晚上22:50分, 北京草庐 约翰-克莱默(John Krammer)是电影<电锯惊魂>(Saw)电影中著名的杀人狂- Jig Saw(电锯)的真名,虽然< ...
- 约翰-克莱默宣言-一个“善良”屠夫的自白
2010年7月23日(周五) 晚上22:50分, 北京草庐 约翰-克莱默(John Krammer)是电影<电锯惊魂>(Saw)电影中著名的杀人狂- Jig Saw(电锯)的真名,虽然& ...
- 基于Claymore's克莱默内核智能挖矿软件【NEO智能矿工】(无抽成版本)
各位矿工兄弟们,你们的福利来了! 大部分矿工兄弟挖矿都是连接矿池进行挖的,选一个大的矿池,比如星火(sparkpool)或鱼池(f2pool),挖矿软件无处乎是ethminer或claymore(所谓 ...
- Solana CEO做客吉姆 · 克莱默《Mad Money》谈融资后规划
在Solana完成由A16z和Polychain Capital领投的3.14 亿美元融资后,其CEO Anatoly Yakovenko于周一参加了Jim Cramer 的 <Mad Mone ...
- 数学图形(1.5)克莱线
克莱线(Cayley's Sextic) 是极坐标方程为: y=4a(cosΘ/3)^3的六次曲线,其中a是一个实数. 相关软件参见:数学图形可视化工具,使用自己定义语法的脚本代码生成数学图形.该软件 ...
- usaco3.2.4 Feed Ratios
一 原题 Feed Ratios 1998 ACM Finals, Dan Adkins Farmer John feeds his cows only the finest mixture of c ...
- 【例题】【高斯消元】USACO3.2.4 Feed Ratios
NKOJ1828 [USACO3.2.4]Feed Ratios饲料调配 时间限制 : 10000 MS 空间限制 : 65536 KB 问题描述 农夫约翰从来只用调配得最好的饲料来喂他的奶牛.饲料用 ...
- 极智AI | 目标检测实现分享二:听说克莱今天复出了?详解 YOLOv2 算法与克莱检测
欢迎关注我的公众号 [极智视界],回复001获取Google编程规范 O_o >_< o_O O_o ~_~ o_O 大家好,我是极智视界,本文介绍一下克莱 ...
- 阿吉兰兄弟控股集团、亚马逊云科技、新东方、丹佛斯、赛莱默等企业亮相服贸会 | 美通社头条...
美通社消息:2022年中国国际服务贸易交易会(服贸会)于8月31日至9月5日在北京举行.服贸会是一个是国家级.国际性.综合型服务贸易展示交易平台,与广交会.进博会比肩,是中国改革开放三大主要展会. 其 ...
最新文章
- 简单的梯度下降算法,你真的懂了吗?
- Android Fragment 你应该知道的一切
- 杨元庆捐资1亿人民币,要为母校上海交大建“最好的”高性能计算中心
- linux shell 输出文件 指定行
- 关于一维数组和二位数组的数组指针
- TabHost选项卡的实现(一):使用TabActivity实现
- 机器学习之 weka学习(二)算法说明
- java递归老鼠走迷宫_递归算法求老鼠走迷宫(C语言)
- 浅析Nginx 正向代理与反向代理
- java mysql 回滚_Java 中对数据库操作时的 回滚
- 苹果Mac视频格式转换器:Filmage Converter
- 千千静听 dfx 音效插件_专业团队的蝰蛇音效,好听就是好软件
- 第四届全国大学生GIS应用技能大赛开发题答案(非官方)
- Android 10 使用PreferenceScreen的方法
- arm 汇编指令 CPS
- 阿里云搭建自己的anki服务器
- win10 Python3.9.5安装报错0x80070652
- Java最大值最小值问题(用户输入)
- MySQL表空间简介
- 每日一threeJS(1)