深信服经常给员工发放下午茶,为保证新鲜,下午茶需要当天采购。
下午茶有水果和面点两种类型,其中水果和面点都有单独的采购价格,它们的价格都是整数元。
某次,负责采购的阿姨忘记了水果和面点各自的价格,但她保存了两天的采购的记录:第一天采购了a1份水果,b1份面点,总花费v1元。第二天采购了a2份水果,b2份面点,总花费v2元。
阿姨希望你帮她计算,水果和面点的实际价格分别是多少。
深信服经常给员工发放下午茶,为保证新鲜,下午茶需要当天采购。
下午茶有水果和面点两种类型,其中水果和面点都有单独的采购价格,它们的价格都是整数元。
某次,负责采购的阿姨忘记了水果和面点各自的价格,但她保存了两天的采购的记录:第一天采购了a1份水果,b1份面点,总花费v1元。第二天采购了a2份水果,b2份面点,总花费v2元。
阿姨希望你帮她计算,水果和面点的实际价格分别是多少。
第一行一个正整数T(T<=100),表示有T组测试数据。
接下来T行,每行6个整数,a1,b1,v1, a2,b2,v2。(所有数字都>=0且 <=1000,000,000。它们的意义如题所述)
有50%的数据案例,上述六个数都属于区间[1,100];而100%的数据案例,上述六个数都属于区间[0,1e9]。
输出T行。
若对应的测试数据存在唯一的解,并且解正整数解,则输出两个整数,表示水果和面点的价格。
若存在多解,或者水果和面点的价格可能不是正整数,则输出UNKNOWN 。
(注:只要水果和面点的价格有可能不是正整数,就应输出UNKNOWN
3 1 2 3 4 5 9 1 2 3 4 5 6 1 2 3 3 6 9
1 1 UNKNOWN UNKNOWN
#include<iostream>
#include<vector>
using namespace std;
int main(){
int t;
cin>>t;
vector<int> a1,b1,v1,a2,b2,v2;
int input;
for(int i = 0; i < t; i++) {
cin >> input;
a1.push_back(input);
cin >> input;
b1.push_back(input);
cin >> input;
v1.push_back(input);
cin >> input;
a2.push_back(input);
cin >> input;
b2.push_back(input);
cin >> input;
v2.push_back(input);
}
for(int i = 0; i < t; i++) { // 循环计算每个数据
if((double(a1[i]) / b1[i]) == (double(a2[i]) / b2[i])) { // ax+by=c, dx+ey=f, a/b=d/e无解
cout << "UNKNOWN" << endl;
continue;
}
double temp1,temp2;
if(a2[i] != 0) {
double mult1 = double(a1[i]) / a2[i]; // ax+by=c, dx+ey=f, mult1 = a/d
temp2 = (double(v1[i]) - double(v2[i]) * mult1) / (double(b1[i]) - (double(b2[i]) * mult1)); // ax+by=c, dx+ey=f, x=(c-f*(a/d))/(b-d*(a/d))
}
else if(a1[i] != 0) {
double mult1 = double(a2[i]) / a1[i]; // ax+by=c, dx+ey=f, mult1 = a/d
temp2 = (double(v2[i]) - double(v1[i]) * mult1) / (double(b2[i]) - (double(b1[i]) * mult1)); // 反过来
}
if(b2[i] != 0) {
double mult2 = double(b1[i]) / b2[i]; // ax+by=c, dx+ey=f, mult1 = a/d
temp1 = (double(v1[i]) - double(v2[i]) * mult2) / (double(a1[i]) - (double(a2[i]) * mult2)); // ax+by=c, dx+ey=f, x=(c-f*(b/e))/(a-d*(b/e))
}
else if(b1[i] != 0) {
double mult2 = double(b2[i]) / b1[i]; // ax+by=c, dx+ey=f, mult1 = a/d
temp1 = (double(v2[i]) - double(v1[i]) * mult2) / (double(a2[i]) - (double(a1[i]) * mult2)); // 反过来
}
double mult2 = double(b1[i]) / b2[i]; // ax+by=c, dx+ey=f, mult2 = b/e
if(/*((temp1 - double(int(temp1+0.5))) > 1e-6) || ((temp2 - double(int(temp2+0.5))) > 1e-6) || */int(temp1+0.5) <= 0 || int(temp2+0.5) <= 0) {
cout << "UNKNOWN" << endl;
continue;
}
if((int(temp1+0.5)*a1[i]+int(temp2+0.5)*b1[i] == v1[i]) && (int(temp1+0.5)*a2[i]+int(temp2+0.5)*b2[i] == v2[i])) {
cout << int(temp1+0.5) << " " << int(temp2+0.5) << endl;
}
else {
cout << "UNKNOWN" << endl;
}
}
return 0;
} #include<bits/stdc++.h>
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
long long a1,b1,c1,a2,b2,c2,x,y;
cin>>a1>>b1>>c1>>a2>>b2>>c2;
if(a1*b2-b1*a2==0){
cout<<"UNKNOWN"<<endl;
continue;
}
if((c1*b2-b1*c2)%(a1*b2-b1*a2)!=0){
cout<<"UNKNOWN"<<endl;
continue;
}
if((a1*c2-a2*c1)%(a1*b2-b1*a2)!=0){
cout<<"UNKNOWN"<<endl;
continue;
}
x=(c1*b2-b1*c2)/(a1*b2-b1*a2);
y=(a1*c2-a2*c1)/(a1*b2-b1*a2);
if(typeid(x)==typeid(long long)&&typeid(y)==typeid(long long)&&x>0&&y>0) cout<<x<<" "<<y<<endl;
else cout<<"UNKNOWN"<<endl;
}
return 0;
}