原题链接:Problem - D - Codeforceshttps://codeforces.com/contest/1512/problem/D
题意简述:
给你n+2项的数组b 要求输出有n项的a数组 有如下条件:
1.a均为b中元素
2.b中有一项为a所有n项元素的和 a不含此项
3.b中有一干扰元素x
4.无法找出符合要求的a 输出-1
思路详见代码段 :
#include <iostream>
#include <algorithm>
using namespace std;
#define int long long
const int N = 1e6 + 5;
int b[N];
void solve()
{
int n;
cin >> n;
for(int i = 1; i <= n + 2; i ++) cin >> b[i];
//使b数组升序 则x要么大于sum 在n+2项上 要么在前n+1项 n+2项为sum
sort(b + 1, b + n + 3);
//求前n项和sum
int sum = 0;
for(int i = 1; i <= n; i ++) sum += b[i];
//sum与第n+1项相同 则x在第n+2位上 直接输出前n项为答案
if(sum == b[n + 1])
{
for(int i = 1; i <= n; i ++)
{
cout << b[i] << ' ';
}
cout << '\n';
}
//sum在第n+2位上 在前n项找到x 输出前n + 1项中除了x的n项为答案
else
{
sum += b[n + 1];
int x = 0;
int flag = 0;
for(int i = 1; i <= n + 1; i ++)
{
if(sum - b[i] == b[n + 2])
{
x = i;
flag = 1;
break;
}
}
if(flag == 1)
{
for(int i = 1; i <= n + 1; i ++)
{
//输出除了x的n项
if(i != x) cout << b[i] << ' ';
}
cout << '\n';
}
//找不到符合的x
else cout << "-1\n";
}
}
signed main()
{
ios::sync_with_stdio(false);
int t;
cin >> t;
while(t --)
{
solve();
}
}