列表

详情


NC54516. 食物分配

描述

众所周知,ICPC是一项团队赛事,需要三人合力协作完成。比赛的主办方会向参赛选手发放参赛服和食物,为了有备无患,准备的食物总是比参赛选手的总数要多一些。
假设你是一名ICPC教练,现在正带队参加一场ICPC区域赛。因为你们是最后一支注册的队伍而准备的食物还有剩余,因此你的队伍得到了4份食物(教练的食物是单独计算的)。因为工作人员的疏忽,每一份食物的分量不是均等的。如果恰好每人分到一份食物,那么没有人会抱怨。但现在多出了一份食物,所以你的队员希望每个人分到的食物分量是均等的。
一份食物只能被分给一个人,同时为了节约粮食,你不能浪费食物。如果没有方法把这四份食物分给三名队员并不使队员们产生抱怨,你只能将这份食物捐赠给慈善机构。
请判断是否存在一种方法可以将四份食物分给三名队员,每人获得的食物分量相等。

输入描述

第一行一个整数,表示数据的组数。
接下来一共T行,第行表示第i组数据,每行四个整数,分别表示四份食物的分量。

输出描述

输出T行,第i行对应输入的第i组数据,每行一个整数。如果能将四份食物分给三个人且每人得到的食物分量相同,则输出每人得到的食物的分量。否则输出-1。

示例1

输入:

2
1 2 3 3
1 1 3 3

输出:

3
-1

说明:

对于第一组数据,一名队员可以分到分量为1和分量为2的食物,另外两名队员则分到分量为3的食物。
对于第二组数据,没有一种划分可以使得三名队员获得的食物分量相同。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 6ms, 内存消耗: 376K, 提交时间: 2019-12-01 14:11:46

#include<iostream>
#include<algorithm>
using namespace std;
int main() {
	int t;
	cin>>t;
	while(t--) {
		int a[4];
		cin>>a[0]>>a[1]>>a[2]>>a[3];
		sort(a,a+4);
		if(a[0]+a[1]==a[2]&&a[2]==a[3]) cout<<a[3]<<endl;
		else cout<<-1<<endl;
	}
}

C++11(clang++ 3.9) 解法, 执行用时: 7ms, 内存消耗: 400K, 提交时间: 2020-02-16 21:43:19

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n;
	cin>>n;
	while(n--)
	{
		int a[4];
		cin>>a[0]>>a[1]>>a[2]>>a[3];
		sort(a,a+4);
		if(a[0]+a[1]==a[2]&&a[2]==a[3])
		cout<<a[2]<<endl;
		else
		cout<<-1<<endl;
	}
}

Python3 解法, 执行用时: 44ms, 内存消耗: 4540K, 提交时间: 2023-04-12 18:52:10

for _ in range(int(input())):
    l=sorted(map(int,input().split()))
    if l[0]+l[1]==l[2]==l[3]:print(l[3])
    else:print(-1)

上一题