首页 > 试题广场 >

信服下午茶

[编程题]信服下午茶
  • 热度指数:520 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

深信服经常给员工发放下午茶,为保证新鲜,下午茶需要当天采购。

下午茶有水果和面点两种类型,其中水果和面点都有单独的采购价格,它们的价格都是整数元。

某次,负责采购的阿姨忘记了水果和面点各自的价格,但她保存了两天的采购的记录:第一天采购了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
示例1

输入

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;
}

发表于 2021-08-30 21:34:11 回复(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;
}


发表于 2022-03-10 20:17:47 回复(0)