USACO/ratios 3.2.4

来源:互联网 发布:手机淘宝怎么差评不了 编辑:程序博客网 时间:2024/06/06 07:32

简单题,不知道怎么写了半天 ,真是捉急了,暴搜就好了,代码如下,就是要注意下0什么的

#include <stdio.h>#include <stdlib.h>int main(){    FILE *fin=fopen("ratios.in","r");    FILE *fout=fopen("ratios.out","w");    int mixture[5][5]={0};    int ans1[100]={0},ans2[100]={0},ans3[100]={0};    int i,j,k,p,f=0,t,m;    int check[4]={0};    int min=10000,min1,min2,min3;    for(i=0;i<4;i++)    {        for(j=0;j<3;j++)        {            fscanf(fin,"%d",&mixture[i][j]);        }    }    for(i=0;i<100;i++)    {        for(j=0;j<100;j++)        {            for(k=0;k<100;k++)            {                memset(check,0,sizeof(check));                for(p=0;p<3;p++)                {                    check[p]=i*mixture[1][p]+j*mixture[2][p]+k*mixture[3][p];                }                if(i||k||j)                {                    for(p=0;p<3;p++)                    {                        if(mixture[0][p]&&!(check[p]%mixture[0][p]))                        {                            t=check[p]/mixture[0][p];                            break;                        }                    }                    if(check[0]==mixture[0][0]*t &&check[1]==mixture[0][1]*t                       &&check[2]==t*mixture[0][2])                    {                     ans1[f]=i;                     ans2[f]=j;                     ans3[f]=k;                     f++;                   }              }           }       }    }    if(f==0)    {        fprintf(fout,"NONE\n");        return 0;    }    else    {     for(i=0;i<f;i++)     {        if(ans1[i]+ans2[i]+ans3[i]<min)        {            min=ans1[i]+ans2[i]+ans3[i];            min1=ans1[i];            min2=ans2[i];            min3=ans3[i];            t=(min1*mixture[1][1]+min2*mixture[2][1]+min3*mixture[3][1])/mixture[0][1];        }     }    }    fprintf(fout,"%d %d %d %d\n",min1,min2,min3,t);    return 0;}