Codeforces Round #563 (Div. 2)

本文详细介绍了Codeforces Round #563的多项编程竞赛题目,包括数组重组、奇数和偶数交换、特殊染色问题、期望异或问题和期望最大公约数问题。通过解析题意和提供解题策略,帮助读者理解和解决这些算法挑战。
摘要由CSDN通过智能技术生成

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值