问题标题: 酷町堂:2573 调制鸡尾酒

0
0
已解决
金志成
金志成
资深守护
资深守护
2573   调制鸡尾酒
经验值:400
题目描述 Description
鸡尾酒可以由3种作为基本配方的酒按一定的比例混合调制而成。现在调酒师JIM在调酒时,发现自己要将三种酒精按X:Y:Z的方式去调制鸡尾酒,但3种酒精已经用完了,现在只有选择3种按其它比例混合的这三种酒去重新配置以得到X:Y:Z的鸡尾酒。


比如他想要配置3:4:5的鸡尾酒,但是只有1:2:3,3:7:1,2:1:2 三种鸡尾酒供他去调酒。所以要么无法配置出3:4:5的鸡尾酒,输出“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份。


 
输入描述 Input Description
第一行,三个用空格分开的整数,表示目标鸡尾酒对于三种基本配方的要求


每行包括三个用空格分开的整数,表示JIM拥有其它三种鸡尾酒的所含基本配方的比例


 
输出描述 Output Description
输出文件要包括一行,这一行要么有四个整数,要么是“NONE”。前三个整数表示三种其它鸡尾酒的份数,用这样的配比可以得到目标鸡尾酒。第四个整数表示混合三种鸡尾酒后得到的目标鸡尾酒的份数。


 
样例输入 Sample Input
3 4 5
1 2 3
3 7 1
2 1 2
样例输出 Sample Output
8 1 5 7

我的83分代码,哪位大佬找出来可以有80豆豆(100*0.8=80)

#include <bits/stdc++.h>
using namespace std;
struct ans{
    int sa,sb,sc,sx;
}p;
int a[10005],b[10005],c[10005],x[15005];
bool pd(int i,int x1,int x2,int x3){
    if ((a[i]*x1+b[i]*x2+c[i]*x3)%x[i]==0) return true;
    return false;
}
int qy(int i,int x1,int x2,int x3){
    return ((a[i]*x1+b[i]*x2+c[i]*x3)/x[i]);
}
int main(){
    for(int i=1;i<=3;i++) cin>>x[i];
    for(int i=1;i<=3;i++) cin>>a[i];
    for(int i=1;i<=3;i++) cin>>b[i];
    for(int i=1;i<=3;i++) cin>>c[i];
    for(int i=0;i<=100;i++){
        for(int j=0;j<=100;j++){
            for(int k=0;k<=100;k++){
                if (pd(1,i,j,k)&&pd(2,i,j,k)&&pd(3,i,j,k)&&(qy(1,i,j,k)==qy(2,i,j,k))&&(qy(2,i,j,k)==qy(3,i,j,k))&&(i!=0||j!=0||k!=0)) {
                    cout<<i<<" "<<j<<" "<<k<<" "<<(a[1]*i+b[1]*j+c[1]*k)/x[1];
                    return 0;
                }
            }
        }
    }
    cout<<"NONE";
    return 0;
} 

 

金志成在2020-07-14 21:01:47追加了内容

帖沉了,大佬回答一下吧


0
0
0
0
我要回答