Usaco Training Section 3.2 Feed Ratios
阿新 • • 發佈:2018-11-12
有4組比例a:b:c,a1:b1:c1,a2:b2:c2,a3:b3:c3,求x,y,z使(a1*x+b1*y+c1*z):(a2*x+b2*y+c2*z):(a3*x+b3*y+c3*z)=a:b:c(0<=x,y,z<100)
其實也不是什麼難題,直接100^3暴力就行。
不過細節還挺多的。
- 注意0的情況。
- 注意是大寫的"NONE"
- 注意a:b:c(99:99:99!=1:1:1)
#include<bits/stdc++.h> using namespace std; inline int read(){ int x=0;char c=getchar(); while(c<'0'||c>'9') c=getchar(); while(c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar(); return x; } int a[4],b[4][4],s[4]; int main() { freopen("ratios.in","r",stdin); freopen("ratios.out","w",stdout); for(int i=1;i<=3;++i) a[i]=read(); int x=__gcd(a[1],a[2]),y=__gcd(a[1],a[3]); int zz=__gcd(x,y); for(int i=1;i<=3;++i) for(int j=1;j<=3;++j) b[i][j]=read(); for(int i=0;i<100;++i) for(int j=0;j<100;++j) for(int k=0;k<100;++k){ s[1]=b[1][1]*i+b[2][1]*j+b[3][1]*k; s[2]=b[1][2]*i+b[2][2]*j+b[3][2]*k; s[3]=b[1][3]*i+b[2][3]*j+b[3][3]*k; if(s[1]<a[1]||s[2]<a[2]||s[3]<a[3]) continue; x=__gcd(s[1],s[2]),y=__gcd(s[1],s[3]); int z=__gcd(x,y); if(z!=0) for(int l=1;l<=3;++l) s[l]/=z; bool f=1; for(int l=1;l<=3;++l) if(s[l]!=a[l]/zz){f=0;break;} if(f){ printf("%d %d %d %d\n",i,j,k,z/zz); return 0; } } puts("NONE"); }