A. Ehab Fails to Be Thanos
time limit per test1 second
memory limit per test256 megabytes
inputstandard input
outputstandard output
You’re given an array a of length 2n. Is it possible to reorder it in such way so that the sum of the first n elements isn’t equal to the sum of the last n elements?
Input
The first line contains an integer n (1≤n≤1000), where 2n is the number of elements in the array a.
The second line contains 2n space-separated integers a1, a2, …, a2n (1≤ai≤106) — the elements of the array a.
Output
If there’s no solution, print “-1” (without quotes). Otherwise, print a single line containing 2n space-separated integers. They must form a reordering of a. You are allowed to not change the order.
Examples
inputCopy
3
1 2 2 1 3 1
outputCopy
2 1 3 1 1 2
inputCopy
1
1 1
outputCopy
-1
Note
In the first example, the first n elements have sum 2+1+3=6 while the last n elements have sum 1+1+2=4. The sums aren’t equal.
In the second example, there’s no solution.
题意:给出一个序列,改变元素的次序,要求新序列前半部分的和与后半部分的和不等
题解:直接排序即可
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define debug(x) cout<<#x<<" is "<<x<<endl;
int a[10005];
int main()
{
int n;
cin>>n;
for(int i=1;i<=2*n;i++)cin>>a[i];
sort(a+1,a+1+2*n);
if(a[1]!=a[2*n]){
for(int i=1;i<=2*n;i++){
printf("%d",a[i]);
char cc=(i==2*n)?'\n':' ';
printf("%c",cc);
}
}
else{
printf("-1\n");
}
return 0;
}
B. Ehab Is an Odd Person
time limit per test1 second
memory limit per test256 megabytes
inputstandard input
outputstandard output
You’re given an array a of length n. You can perform the following operation on it as many times as you want:
Pick two integers i and j (1≤i,j≤n) such that ai+aj is odd, then swap ai and aj.
What is lexicographically the smallest array you can obtain?
An array x is lexicographically smaller than an array y if there exists an index i such that xi<yi, and xj=yj for all 1≤j<i. Less formally, at the first index i in which they differ, xi<yi
Input
The first line contains an integer n (1≤n≤105) — the number of elements in the array a.
The second line contains n space-separated integers a1, a2, …, an (1≤ai≤109) — the elements of the array a.
Output
The only line contains n space-separated integers, the lexicographically smallest array you can obtain.
Examples
inputCopy
3
4 1 7
outputCopy
1 4 7
inputCopy
2
1 1
outputCopy
1 1
Note
In the first example, we can swap 1 and 4 since 1+4=5, which is odd.
题意:给出一个序列,如果ai+aj的值是奇数,就可以交换ai和aj,求一个字典序最小的新序列
题解:如果同时存在奇数和偶数,那么所有元素都可以经过一个中间元素进行交换,所以直接排序即可。否则就不能进行交换。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define debug(x) cout<<#x<<" is "<<x<<endl;
int a[100005];
int main()
{
int n;
scanf("%d",&n);
int o=0;
int e=0;
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
if(a[i]%2)o++;
else e++;
}
if(o&&e){
sort(a+1